# PRUEBAS_EXPORT/export_cartera_junta.py
"""
Script de PRUEBA e independiente del dashboard.
Exporta la tabla cartera_junta de Supabase a un Excel para revisarla.

Autodetecta en cuál proyecto Supabase vive la tabla, probando las credenciales
que ya tienes configuradas (en el .env de esta carpeta y en el .env del backend).
Lee TODAS las filas paginando (Supabase devuelve máx. 1000 por consulta).

Uso:  py -3.12 export_cartera_junta.py
"""
import os
from dotenv import load_dotenv

_AQUI = os.path.dirname(__file__)
# Carga el .env de esta carpeta y también el del backend (para reutilizar credenciales)
load_dotenv(os.path.join(_AQUI, ".env"))
load_dotenv(os.path.join(_AQUI, "..", "backend", ".env"))

PAGINA = 1000
TABLA = os.getenv("CARTERA_TABLA", "cartera_junta")


def _valida(url):
    """Descarta URLs vacías o de plantilla (XXXX)."""
    if not url:
        return False
    u = url.strip().lower()
    return u.startswith("http") and "xxxx" not in u


def _candidatos():
    """Pares (nombre, url, key) a probar, en orden de prioridad."""
    pares = [
        ("CARTERA",        os.getenv("CARTERA_URL"),       os.getenv("CARTERA_KEY")),
        ("SUPABASE",       os.getenv("SUPABASE_URL"),      os.getenv("SUPABASE_KEY")),
        ("SUPABASE_PAUTA", os.getenv("SUPABASE_PAUTA_URL"),os.getenv("SUPABASE_PAUTA_KEY")),
    ]
    vistos, out = set(), []
    for nombre, url, key in pares:
        if _valida(url) and key and (url, key) not in vistos:
            vistos.add((url, key))
            out.append((nombre, url.strip(), key.strip()))
    return out


def main():
    from supabase import create_client

    candidatos = _candidatos()
    if not candidatos:
        print("❌ No hay credenciales válidas. Pon CARTERA_URL/CARTERA_KEY en el .env de esta carpeta.")
        return

    # Buscar en qué proyecto existe la tabla
    sb = None
    for nombre, url, key in candidatos:
        try:
            cli = create_client(url, key)
            cli.table(TABLA).select("*").limit(1).execute()  # prueba
            sb = cli
            print(f"✅ Tabla '{TABLA}' encontrada en el proyecto: {nombre} ({url})")
            break
        except Exception as e:
            print(f"  · {nombre}: no sirvió ({str(e)[:80]})")

    if sb is None:
        print(f"\n❌ No encontré la tabla '{TABLA}' en ninguno de tus proyectos Supabase.")
        print("   Copia CARTERA_URL y CARTERA_KEY (secrets de GitHub) al .env de esta carpeta.")
        return

    # Traer TODAS las filas paginando de a 1000
    filas = []
    inicio = 0
    while True:
        res = sb.table(TABLA).select("*").range(inicio, inicio + PAGINA - 1).execute()
        lote = res.data or []
        if not lote:
            break
        filas.extend(lote)
        print(f"  leídas {len(filas)} filas...")
        if len(lote) < PAGINA:
            break
        inicio += PAGINA

    if not filas:
        print(f"⚠️ La tabla '{TABLA}' está vacía.")
        return

    columnas = list(filas[0].keys())

    import openpyxl
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.title = "cartera_junta"
    ws.append(columnas)
    for r in filas:
        ws.append([r.get(c, "") for c in columnas])

    salida = os.path.join(_AQUI, "cartera_junta.xlsx")
    wb.save(salida)
    print(f"\n✅ Exportado: {salida}")
    print(f"   Filas: {len(filas)}  |  Columnas: {', '.join(columnas)}")


if __name__ == "__main__":
    main()
