import plac
import subprocess
import re
from pathlib import Path
from datetime import datetime
import config

cfg = config.Config()
imr_dir = cfg.system_dir + '\\IQD'
catalog_dir = cfg.system_dir + '\\Catalogs'

export_translation = {
    'csv': 'x_ascii.flt',
    'xls': 'x_excel.flt',
    'sql': 'x_sql.flt',
    'txt': 'x_text.flt',
    'iqd': 'x_iqd.flt',
    'ims': 'ims'
}
min_filesize = 2000   # 1 kB


@plac.pos('imr_file', '', type=str)
@plac.opt('export_format', '', type=str, choices=export_translation.keys())
@plac.opt('export_dir', '', type=str)
@plac.opt('catalog', '', type=str)
def export(imr_file, export_format='csv', export_dir=None, catalog=None):
    imr_full_filename = imr_dir + '\\' + imr_file
    export_filename = Path(imr_full_filename).name[:-3] + export_format
    if export_dir is None:
        export_dir = str(Path(imr_full_filename).parent)
    export_full_filename = f'{export_dir}\\{export_filename}'
    if catalog is None:
        catalog = catalog_name(imr_file)
    if catalog[-4:] != '.cat':
        catalog = catalog + '.cat'
    catalog_full_filename = f'{catalog_dir}\\{catalog}'
    start = datetime.now().timestamp()
    cmd = f'"{cfg.cognos_dir}\\runmac32.exe" "{cfg.tools_dir}\\VBS\\impromptu.mac" "{imr_full_filename}","{catalog_full_filename}","{export_full_filename}","{export_translation[export_format]}"'
    print(f"Exportiere '{imr_file}' als '{export_format}' nach '{export_dir}'...", end='')

    p = subprocess.Popen(cmd)
    p.wait()
    if Path(export_full_filename).exists():
        export_stat = Path(export_full_filename).stat()
        if export_stat.st_mtime > start and export_stat.st_size > min_filesize:
            print('erfolgreich.')
            filesize_kb = round(export_stat.st_size / 1024)
            stop = datetime.now().timestamp()
            delta = round((stop - start))
            print(str(filesize_kb) + ' KB in ' + str(delta // 60) + ':' + str(delta % 60).zfill(2) + ' min geschrieben.')
            return
    print('fehlgeschlagen.')


def catalog_name(imr_file):
    p = re.compile(r'catalogs\\([^\.]+)\.cat', re.IGNORECASE)
    with open(imr_dir + '\\' + imr_file, 'r', errors='ignore') as f:
        for line in f.readlines():
            m = p.search(line)
            if m:
                return p.match(m.group()).groups()[0].lower()


if __name__ == '__main__':
    # plac.call(export)
    export('Belege\\current_date_Prognose.imr', 'ims')