#!/usr/bin/env python

from __future__ import print_function

import argparse
import logging
import os
import shutil
import stat

from scan_pdf import Scanner, Converter, Combiner, TempDir

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Produce PDF from Scanner with document-feeder')
    parser.add_argument('output_file_name', type=str, nargs=1,
                        help='name of the produced output file')
    parser.add_argument('--resolution', dest='resolution', type=int,
                        default=300,
                        help='scan resolution DPI (default: 300)')
    parser.add_argument('--flatbed', dest='flatbed', action='store_true',
                        help='scan only one page from flatbed glass')
    parser.add_argument('-d', dest='debug', action='store_true',
                        help='enable debug output')
    parser.add_argument('--duplex', dest='duplex', action='store_true',
                        help='scan both sides of document')
    parser.add_argument('--color-mode', dest='color_mode', action='store',
                        choices=['bw', 'gray', 'color'],
                        default='gray', help='default: gray')
    parser.add_argument('--threshold', dest='threshold', default=None, action='store', help='disabled by default')
    parser.add_argument('--color-depth', dest='color_depth', default=4)
    parser.add_argument('--paper-format', dest='paper_format', action='store',
                        choices=['A4'],
                        default='A4', help='default: A4')

    options = parser.parse_args()

    logging.basicConfig(level=logging.DEBUG if options.debug else logging.INFO)
    logger = logging.getLogger(__name__)

    origin_dir = os.getcwd()

    with TempDir() as temp_dir:
        os.chmod(temp_dir, stat.S_IRWXU |stat.S_IRWXG | stat.S_IRWXO)
        os.chdir(temp_dir)

        output_file_name = options.output_file_name[0]

        scanner = Scanner(options)

        output_basenames = scanner.get_page_file_basenames()

        if len(output_basenames) > 0:
            converter = Converter(options)
            for page_number, output_basename in enumerate(output_basenames, start=1):
                converter.convert(output_basename, scanner.page_file_suffix, options.duplex and page_number % 2 == 0)

            combiner = Combiner(options)
            combiner.combine([output_basename + converter.page_file_suffix for output_basename in output_basenames])

            os.chdir(origin_dir)
            shutil.move(os.path.join(temp_dir, os.path.basename(output_file_name)), output_file_name)
        else:
            logger.warn("no pages found")
