import os
import time
import json
import pandas as pd
from datetime import datetime

# --- RUTAS DE TU CONTABILIDAD ---
HOME = os.path.expanduser("~")
ARCHIVO_CSV = os.path.join(HOME, 'Documents', 'Contabilidad_Procesada', 'Registro_Maestro_Operaciones.csv')
CARPETA_HUERFANOS = os.path.join(HOME, 'Documents', 'Contabilidad_Procesada', 'Sustentos_Huerfanos')

# --- RUTA DEL SERVIDOR WEB BLINDADA ---
DIR_ACTUAL = os.path.dirname(os.path.abspath(__file__))
ARCHIVO_JSON = os.path.join(DIR_ACTUAL, "datos_myrjar.json")

def generar_datos_web():
    datos = {
        "total_gastos": 0.0,
        "operaciones": 0,
        "huerfanos_total": 0.0,
        "grafico_etiquetas": [],
        "grafico_valores": [],
        "registro_compras": [] # 🚀 NUEVO: Aquí guardaremos el detalle de cada factura
    }

    # 1. Huérfanos
    try:
        total_huerfanos = 0.0
        if os.path.exists(CARPETA_HUERFANOS):
            for arch in os.listdir(CARPETA_HUERFANOS):
                partes = os.path.splitext(arch)[0].split('_')
                if partes[1].startswith("ANT"): total_huerfanos += float(partes[2])
                else: total_huerfanos += float(partes[-3])
        datos["huerfanos_total"] = total_huerfanos
    except Exception: pass

    # 2. Análisis del CSV Maestro
    try:
        if os.path.exists(ARCHIVO_CSV):
            df = pd.read_csv(ARCHIVO_CSV, sep=';', encoding='utf-8-sig')
            df.columns = [str(col).replace('\ufeff', '').strip() for col in df.columns]
            
            if 'Clase_Doc' in df.columns:
                df_prin = df[df['Clase_Doc'] == 'Principal'].copy()
                datos["total_gastos"] = pd.to_numeric(df_prin['Monto_Total'], errors='coerce').sum()
                datos["operaciones"] = len(df_prin)

                # Gráfico
                if 'Fecha' in df.columns:
                    df_prin['Fecha_dt'] = pd.to_datetime(df_prin['Fecha'], errors='coerce')
                    gastos_por_dia = df_prin.groupby(df_prin['Fecha_dt'].dt.strftime('%d-%b'))['Monto_Total'].sum()
                    ultimos_dias = gastos_por_dia.tail(5)
                    datos["grafico_etiquetas"] = ultimos_dias.index.tolist()
                    datos["grafico_valores"] = ultimos_dias.values.tolist()

                # 🚀 NUEVO: Extracción del Registro de Compras (Ordenado de más reciente a más antiguo)
                df_prin = df_prin.sort_values(by='ID_Operacion', ascending=False)
                lista_compras = []
                for _, row in df_prin.iterrows():
                    lista_compras.append({
                        "op": str(row.get('ID_Operacion', '')).strip(),
                        "fecha": str(row.get('Fecha', '')).strip(),
                        "ruc": str(row.get('RUC', '')).strip(),
                        "emisor": str(row.get('Emisor', '')).strip().replace('_', ' '),
                        "base": float(pd.to_numeric(row.get('Base_Imponible', 0), errors='coerce')),
                        "igv": float(pd.to_numeric(row.get('IGV', 0), errors='coerce')),
                        "total": float(pd.to_numeric(row.get('Monto_Total', 0), errors='coerce'))
                    })
                datos["registro_compras"] = lista_compras

    except Exception as e:
        print(f"Error leyendo CSV: {e}")

    # Escribir el archivo JSON
    try:
        with open(ARCHIVO_JSON, 'w', encoding='utf-8') as f:
            json.dump(datos, f)
        print(f"[{datetime.now().strftime('%H:%M:%S')}] ✅ Sincronización Exitosa (Incluye Detalle Compras).")
    except Exception as e:
        print(f"❌ Error al guardar JSON: {e}")

if __name__ == "__main__":
    print(" 📡 Sincronizador MYRJAR Web Activado...")
    while True:
        generar_datos_web()
        time.sleep(3)
