import csv
import re
from datetime import datetime
import mysql.connector

DB = {
    'host': 'localhost',
    'user': 'laravel_user',
    'password': 'P4ssw0rd.96!',
    'database': 'laravel_db'
}

def estrai_trn(descrizione):
    match = re.search(r'TRN\s+([0-9A-Za-z]+)', descrizione)
    return match.group(1) if match else None

def estrai_commissione(descrizione):
    match = re.search(r'COMM\s+([\d\.,]+)', descrizione)
    return float(match.group(1).replace('.', '').replace(',', '.')) if match else 0.0

def estrai_spese(descrizione):
    match = re.search(r'SPESE\s+([\d\.,]+)', descrizione)
    return float(match.group(1).replace('.', '').replace(',', '.')) if match else 0.0

def parse_importo(valore):
    return float(valore.replace('.', '').replace(',', '.'))

def importa_file(file_path, id_condominio):
    conn = mysql.connector.connect(**DB)
    cur = conn.cursor()
    with open(file_path, encoding='utf-8') as f:
        # Trova la riga di intestazione
        header_row = None
        for line in f:
            line_strip = line.strip()
            if line_strip.lower().startswith("data;valuta;descrizione;euro;caus."):
                header_row = line_strip.split(";")
                break
        if not header_row:
            print("Intestazione non trovata! Controlla il file.")
            return
        # Riposiziona il puntatore dopo l'intestazione
        reader = csv.DictReader(f, fieldnames=header_row, delimiter=';')
        for row in reader:
            # Salta eventuali righe completamente vuote
            if not row['Data'] or not row['Descrizione']:
                continue
            try:
                data = datetime.strptime(row['Data'], '%d/%m/%Y').date()
            except Exception:
                continue  # Skip righe con data non valida
            descrizione = row['Descrizione']
            try:
                importo = parse_importo(row['Euro'])
            except Exception:
                importo = 0.0
            causale = row.get('Caus.', '')
            cbi = causale if causale else None
            riferimento_originale = estrai_trn(descrizione)
            commissione = estrai_commissione(descrizione)
            spese = estrai_spese(descrizione)
            trn = riferimento_originale
            cur.execute("""
                INSERT INTO movimenti_bancari
                (id_condominio, data, importo, descrizione, causale, riferimento_originale, stato, commissione, spese, trn, cbi)
                VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """, (id_condominio, data, importo, descrizione, causale, riferimento_originale, 'importato', commissione, spese, trn, cbi))
    conn.commit()
    cur.close()
    conn.close()
    print("[OK] Movimenti bancari importati.")

if __name__ == '__main__':
    importa_file('estrattoconto.csv', 1)