# medir_tiempos.py
# Mide cuánto tarda CADA parte que carga el dashboard de Leads al iniciar.
# Simula lo mismo que hace el backend en su precarga, pero cronometrando cada paso.
# Ejecutar en backend/:  python medir_tiempos.py
import time
import services as S

def cron(nombre, fn):
    t0 = time.perf_counter()
    ok = "OK"
    extra = ""
    try:
        r = fn()
        try:
            if isinstance(r, (list, dict)):
                extra = f"({len(r)} items)"
        except Exception:
            pass
    except Exception as e:
        ok = "ERROR"
        extra = str(e)[:60]
    dt = time.perf_counter() - t0
    print(f"  {nombre:38} {dt:7.2f}s  {ok}  {extra}")
    return dt

periodos = S._periodos_actual_anterior()
a0, m0 = periodos[0]

print("\n" + "="*70)
print("  MEDICIÓN DE TIEMPOS DE CARGA — Dashboard LEADS")
print("="*70)

print("\n[1] INSUMOS CRUDOS (consultas base, se cargan 1 vez)")
tot1 = 0
tot1 += cron("Leads (Chatwoot/PostgreSQL)", S._leads_crudos)
tot1 += cron("Cursos (SQL Server)", S._cursos_crudos)
tot1 += cron("Matriculas (SQL Server)", S._matriculas_crudas)
tot1 += cron("Leads asignados/respuesta", S._leads_asignados_crudos)
tot1 += cron("Cartera (Supabase)", S._cartera_rows_cache)
tot1 += cron("Plantillas", S._plantillas_crudas)

print(f"\n  --> Subtotal insumos: {tot1:.2f}s")

print(f"\n[2] APARTADO LEADS  (periodo {a0}-{m0}, filtros TODOS)")
tot2 = 0
tot2 += cron("leads_dashboard", lambda: S.leads_dashboard(a0, m0, "TODOS", "TODOS", "TODOS"))
tot2 += cron("leads_filtros", S.opciones_filtros)
print(f"\n  --> Subtotal Leads: {tot2:.2f}s")

print(f"\n[3] APARTADO VENDEDORES  (periodo {a0}-{m0})")
tot3 = 0
tot3 += cron("vendedores_dashboard", lambda: S.vendedores_dashboard(a0, m0, "TODOS"))
print(f"\n  --> Subtotal Vendedores: {tot3:.2f}s")

print(f"\n[4] APARTADO OTROS GENERAL  (periodo {a0}-{m0}) — el mas pesado")
tot4 = 0
tot4 += cron("otros_general", lambda: S.otros_general(a0, m0, "TODOS"))
print(f"\n  --> Subtotal Otros General: {tot4:.2f}s")

print(f"\n[5] APARTADO ROAS  (periodo {a0}-{m0})")
tot5 = 0
tot5 += cron("roas_dashboard", lambda: S.roas_dashboard(a0, m0, "TODOS"))
print(f"\n  --> Subtotal ROAS: {tot5:.2f}s")

total = tot1 + tot2 + tot3 + tot4 + tot5
print("\n" + "="*70)
print(f"  TIEMPO TOTAL (todo en frio, 1a vez): {total:.2f}s")
print("  Nota: en el arranque real, [1]+[2] van en un hilo y [4] en otro,")
print("  asi que corren EN PARALELO. El tiempo real es ~ el mas lento de los dos.")
print("="*70 + "\n")
