import asyncio
import datetime
import json
import os
import pathlib
import re as regex
import typing

import click

from travelogues_extraction.controller.main import FromAlmaOutputToExcel


@click.command()
@click.argument('--input-file', help='Use .xlsx file as input', type=click.File)
@click.argument('--ac-column', type=click.STRING, help=
'The column of the input file, where the ac numbers are. The column name is the string in the first row of the column',
                )
@click.argument('--start', default=0, type=click.INT, help='The first record of the input file to extract the data')
@click.argument('--stop', default=None, type=click.INT, help='The last record of the input file to extract the data')
@click.argument('--output-file', help='Generate this .xlsx file', type=click.File)
@click.argument('--log-file', default=None, help='If given, write a csv log that that file', type=click.File)
@click.argument('--deep-log-file', default=None, help='If given, write a deep json log that that file', type=click.File)
def extract_data(input_file: str, output_file: str, ac_column: str, start: typing.Optional[int] = 0, stop: typing.Optional[int]=None, log_file: typing.Optional[str]=None, deep_log_file: typing.Optional[str]=None):
    """
    Takes an excel file with a column of ac numbers, gets data from alma, brings the data in excel like shape, and generates an excel file with this data
    """

    loop = asyncio.new_event_loop()
    loop.run_until_complete(_extract_data(input_file, output_file, ac_column, start, stop, log_file, deep_log_file))


async def _extract_data(input_file: str, output_file: str, ac_column: str, start: typing.Optional[int] = 0, stop: typing.Optional[int]=None, log_file: typing.Optional[str]=None, deep_log_file: typing.Optional[str]=None) -> typing.NoReturn:
    input_file = pathlib.Path(input_file)
    output_path = pathlib.Path(output_file)

    converter = FromAlmaOutputToExcel(input_file, output_path.absolute(), slice(start, stop, 1), ac_column)
    await converter.runasync()
    await converter.close()
    converter.write()

    if log_file:
        converter.log.to_csv(log_file)

    # to do unblock
    if deep_log_file:
        with open(deep_log_file, 'w') as file:
            json.dump(converter.sub_log, file)

if __name__ == '__main__':
    extract_data()
