import os
import re
import json

LOGFILE = "log/import_mdb_to_mysql.jsonlog"

def estrai_blocchi_errori(logfile):
    # Carica tutto il log in memoria per poter "navigare" avanti e indietro
    with open(logfile, encoding="utf-8") as f:
        lines = f.readlines()

    # Trova indici delle righe con errori
    error_lines = [(i, line) for i, line in enumerate(lines) if re.search(r'error', line, re.IGNORECASE)]

    risultati = []

    for idx, error_line in error_lines:
        # Cerca indietro la riga "start_mdb" più vicina
        file_mdb = None
        for j in range(idx, -1, -1):
            if '"event": "start_mdb"' in lines[j]:
                try:
                    obj = json.loads(lines[j])
                    file_mdb = obj.get("file")
                except Exception:
                    pass
                break

        # Estrai altre info utili: ad esempio tabella, azioni
        tabella = ""
        try:
            obj = json.loads(error_line)
            tabella = obj.get("table") or obj.get("table_mdb") or ""
        except Exception:
            pass

        # Cerca le azioni fatte per quel file: le righe tra "start_mdb" e il prossimo "start_mdb" o fine file
        azioni = []
        start_idx = next((j for j in range(idx, -1, -1) if '"event": "start_mdb"' in lines[j]), None)
        end_idx = next((j for j in range(idx+1, len(lines)) if '"event": "start_mdb"' in lines[j]), len(lines))
        # Trova tutte le importazioni tabella in questo blocco
        if start_idx is not None:
            for row in lines[start_idx:end_idx]:
                if ('"import_table"' in row or '"empty_table"' in row or '"table_done"' in row):
                    azioni.append(row.strip())

        risultati.append({
            "file_mdb": file_mdb,
            "errore": error_line.strip(),
            "tabella": tabella,
            "azioni": azioni
        })

    return risultati

if __name__ == "__main__":
    if not os.path.exists(LOGFILE):
        print(f"Log non trovato: {LOGFILE}")
        exit(1)

    blocchi = estrai_blocchi_errori(LOGFILE)
    for b in blocchi:
        print(f"\n=== ERRORE SU FILE: {b['file_mdb']} ===")
        print(f"Errore: {b['errore']}")
        if b['tabella']:
            print(f"Tabella coinvolta: {b['tabella']}")
        print("Azioni svolte su questo file:")
        for az in b["azioni"]:
            print("  ", az)
        print("-" * 50)