\
import argparse

from app.adapters.moodle import obtener_usuarios_moodle, validar_campos_perfil
from app.config import get_settings
from app.database import get_connection
from app.services.sync_contactos import sincronizar_contactos


def print_stats(stats, dry_run: bool):
    print()
    print("======================================")
    print(" DAVIDHL7 CONNECT")
    print(" Moodle -> Contactos")
    print("======================================")
    print(f"Usuarios encontrados:       {stats.encontrados}")
    print(f"Con celular:                {stats.con_celular}")
    print(f"Con consentimiento:         {stats.con_consentimiento}")
    print(f"Teléfonos válidos:          {stats.telefonos_validos}")
    print(f"Teléfonos inválidos:        {stats.telefonos_invalidos}")
    print(f"Insertados:                 {stats.insertados}")
    print(f"Actualizados:               {stats.actualizados}")
    print(f"Omitidos:                   {stats.omitidos}")
    print("--------------------------------------")
    if dry_run:
        print("MODO PRUEBA: no se escribió ningún dato.")
    else:
        print("Sincronización completada.")
    print("======================================")


def main():
    parser = argparse.ArgumentParser(
        description="Sincroniza usuarios Moodle con DavidHL7 Connect."
    )
    parser.add_argument(
        "--dry-run",
        action="store_true",
        help="Lee y valida, pero no escribe en dhc_contactos.",
    )
    args = parser.parse_args()

    settings = get_settings()
    connection = get_connection(settings)

    try:
        fields = validar_campos_perfil(connection, settings)
        required = {"celular", "consentimiento_comunicaciones"}
        missing = required - set(fields)

        if missing:
            raise RuntimeError(
                "Faltan campos de perfil en Moodle: " + ", ".join(sorted(missing))
            )

        usuarios = obtener_usuarios_moodle(connection, settings)
        stats = sincronizar_contactos(
            connection,
            settings,
            usuarios,
            dry_run=args.dry_run,
        )
        print_stats(stats, args.dry_run)
    finally:
        connection.close()


if __name__ == "__main__":
    main()
