#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv
import codecs
import logging
import os

logger = logging.getLogger(__name__)
logger.setLevel(logging.NOTSET)

def setup_logging(log_path):
    log_file = os.path.join(log_path, '{}.log'.format(time.strftime("%Y%m%d-%H%M%S")))
    logging.config.dictConfig({
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {'standard': {'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'}},
        'handlers': {
            'default': {'level': 'NOTSET', 'class': 'logging.StreamHandler', 'formatter': 'standard'},
            'logfile': {'filename': log_file, 'class': 'logging.FileHandler', 'formatter': 'standard'}
        },
        'loggers': {'': {'handlers': ['default', 'logfile'], 'level': 'NOTSET', 'propagate': True}}
    })

def create_extended_data_file(output_dir, ref_file, extended_file):
    try:
        ref_data = {}
        with codecs.open(ref_file, "r", encoding='utf-8') as rf:
            reader = csv.DictReader(rf, delimiter=';')
            for row in reader:
                ref_data[row['EAN_oder_Parent']] = row

        output_files = [f for f in os.listdir(output_dir) if f.startswith("Nike_Bestand_") and not f.endswith("nomatch.csv")]

        with codecs.open(extended_file, "w", encoding='utf-8') as ef:
            writer = None
            for output_file in output_files:
                with codecs.open(os.path.join(output_dir, output_file), "r", encoding='utf-8') as of:
                    reader = csv.DictReader(of, delimiter=';')
                    if writer is None:
                        fieldnames = reader.fieldnames + list(next(iter(ref_data.values())).keys())
                        writer = csv.DictWriter(ef, fieldnames=fieldnames, delimiter=';', quoting=csv.QUOTE_NONNUMERIC)
                        writer.writeheader()

                    for row in reader:
                        ean = row.get("EAN")
                        if ean in ref_data:
                            row.update(ref_data[ean])
                        writer.writerow(row)
    except Exception as e:
        logger.error(f"Failed to create extended data file: {e}")

def main():
    data_root = r"/ftproot/Matching_Nike_Bestand"
    output_dir = os.path.join(data_root, "out")
    ref_file = os.path.join(data_root, "ref_fedas", "Fedas_EAN_Parent.csv")
    extended_file = os.path.join(output_dir, "Test_all_data_extended.csv")
    setup_logging(os.path.join(data_root, "log"))
    create_extended_data_file(output_dir, ref_file, extended_file)

if __name__ == "__main__":
    main()
