import os
import pymysql
from dotenv import load_dotenv

load_dotenv()

# ===============================
# DB INTERNA (ORIGEN)
# ===============================
DB_SRC = {
    "host": os.getenv("DB_HOST"),
    "user": os.getenv("DB_USER"),
    "password": os.getenv("DB_PASSWORD"),
    "database": os.getenv("DB_NAME"),
    "cursorclass": pymysql.cursors.DictCursor,
}

# ===============================
# DB EXTERNA (DESTINO CRM)
# ===============================
DB_DST = {
    "host": os.getenv("DB_HOST_2"),
    "user": os.getenv("DB_USER_2"),
    "password": os.getenv("DB_PASSWORD_2"),
    "database": os.getenv("DB_NAME_2"),
    "cursorclass": pymysql.cursors.DictCursor,
}

EMPRESA_NOMBRE = os.getenv("EMPRESA_NOMBRE")
ID_PROYECTO_N8N = int(os.getenv("ID_INMOBILIARIA", 0))

PROYECTOS_ACTIVO_STR = os.getenv("PROYECTOS_ACTIVO", "")
PROYECTOS_ACTIVO = [
    int(x) for x in PROYECTOS_ACTIVO_STR.split(",") if x.strip().isdigit()
]


def main():
    if not EMPRESA_NOMBRE or not ID_PROYECTO_N8N:
        raise ValueError("EMPRESA_NOMBRE o ID_INMOBILIARIA no definidos")

    src = pymysql.connect(**DB_SRC)
    dst = pymysql.connect(**DB_DST)

    try:
        with src.cursor() as c_src, dst.cursor() as c_dst:

            for proyecto_id in PROYECTOS_ACTIVO:
                print(f"🔄 Sincronizando proyecto {proyecto_id}")

                # ===============================
                # 1️⃣ LIMPIAR DESTINO
                # ===============================
                c_dst.execute(
                    "DELETE FROM Modelos_crm WHERE id_proyecto_n8n = %s",
                    (proyecto_id,)
                )
                c_dst.execute(
                    "DELETE FROM Productos_crm WHERE id_proyecto_n8n = %s",
                    (proyecto_id,)
                )
                dst.commit()

                # ===============================
                # 2️⃣ MODELOS
                # ===============================
                c_src.execute(
                    "SELECT * FROM Modelos WHERE id_proyecto = %s",
                    (proyecto_id,)
                )
                modelos = c_src.fetchall()

                for m in modelos:
                    c_dst.execute("""
                        INSERT INTO Modelos_crm (
                            id_modelo,
                            id_proyecto,
                            nombre,
                            dormitorios,
                            banos,
                            precioDesde,
                            imagenes,
                            fechaCreacion,
                            fechaEdicion,
                            empresa_nombre,
                            id_proyecto_n8n
                        ) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
                    """, (
                        m["id_modelo"],
                        m["id_proyecto"],
                        m["nombre"],
                        m["dormitorios"],
                        m["banos"],
                        m["precioDesde"],
                        m["imagenes"],
                        m["fechaCreacion"],
                        m["fechaEdicion"],
                        EMPRESA_NOMBRE,
                        ID_PROYECTO_N8N
                    ))

                print(f"   📦 Modelos insertados: {len(modelos)}")


                # ===============================
                # 3️⃣ PRODUCTOS
                # ===============================
                c_src.execute(
                    "SELECT * FROM Productos WHERE id_proyecto = %s",
                    (proyecto_id,)
                )
                productos = c_src.fetchall()
                
                for p in productos:
                    c_dst.execute("""
                        INSERT INTO Productos_crm (
                            id_producto,
                            id_proyecto,
                            nombre,
                            nombreProyecto,
                            nombreEtapa,
                            nombreSubAgrupacion,
                            nombreModelo,
                            precio,
                            precioBase,
                            descuentomaximo_valor,
                            descuentomaximo_unidad,
                            descuentocotizadorweb_valor,
                            descuentocotizadorweb_unidad,
                            piso,
                            orientacion,
                            fechaCreacion,
                            fechaEdicion,
                            tipo_producto,
                            programa,
                            superficies_terraza,
                            superficies_interior,
                            superficies_municipal,
                            superficies_util,
                            superficies_total,
                            superficies_loggia,
                            superficies_jardin,
                            superficies_miradorTerraza,
                            superficies_otrasSuperficies,
                            superficies_terreno,
                            disponibleWeb,
                            disponibleSistema,
                            estado,
                            calificacionEnergetica,
                            comentario,
                            cantDormitorios,
                            cantBanos,
                            empresa_nombre,
                            id_proyecto_n8n
                        ) VALUES (
                            %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,
                            %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,
                            %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,
                            %s,%s,%s,%s,%s,%s,%s,%s
                        )
                    """, (
                        p["id_producto"],
                        p["id_proyecto"],
                        p["nombre"],
                        p["nombreProyecto"],
                        p["nombreEtapa"],
                        p["nombreSubAgrupacion"],
                        p["nombreModelo"],
                        p["precio"],
                        p["precioBase"],
                        p["descuentomaximo_valor"],
                        p["descuentomaximo_unidad"],
                        p["descuentocotizadorweb_valor"],
                        p["descuentocotizadorweb_unidad"],
                        p["piso"],
                        p["orientacion"],
                        p["fechaCreacion"],
                        p["fechaEdicion"],
                        p["tipo_producto"],
                        p["programa"],
                        p["superficies_terraza"],
                        p["superficies_interior"],
                        p["superficies_municipal"],
                        p["superficies_util"],
                        p["superficies_total"],
                        p["superficies_loggia"],
                        p["superficies_jardin"],
                        p["superficies_miradorTerraza"],
                        p["superficies_otrasSuperficies"],
                        p["superficies_terreno"],
                        p["disponibleWeb"],
                        p["disponibleSistema"],
                        p["estado"],
                        p["calificacionEnergetica"],
                        p["comentario"],
                        p["cantDormitorios"],
                        p["cantBanos"],
                        EMPRESA_NOMBRE,
                        ID_PROYECTO_N8N
                    ))
                
                print(f"   📦 Productos insertados: {len(productos)}")
                

            dst.commit()
            print("✅ Sincronización completa")

    finally:
        src.close()
        dst.close()


if __name__ == "__main__":
    main()
