"""
Script CLI para sincronizar los permisos de la aplicación.
Útil para el bootstrap inicial cuando el endpoint /sync aún no es accesible
o cuando se desea forzar una actualización desde la consola/Docker.

Uso:
docker exec -it <container> python3 -m api.v1.modules.core.permissions.sync_cli
"""

import sys
import os
import logging

# Configurar logging básico para ver resultados en consola
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
logger = logging.getLogger(__name__)

# Asegurar que el backend esté en el path
sys.path.append(os.path.abspath("."))
sys.path.append(os.path.abspath("backend"))

from core.database import CoreSessionLocal
from api.v1.modules.core.permissions.service import PermissionService

def run_sync():
    """Ejecuta la lógica de sincronización modular."""
    logger.info("Iniciando Sincronización Modular de Permisos...")
    
    db = CoreSessionLocal()
    try:
        service = PermissionService(db)
        result = service.sync_permissions()
        
        logger.info("-" * 40)
        logger.info(f"Sincronización Exitosa!")
        logger.info(f"  - Nuevos insertados: {result['synced']}")
        logger.info(f"  - Existentes actualizados: {result['updated']}")
        logger.info(f"  - Total en Registry: {result['total_registered']}")
        logger.info("-" * 40)
        
    except Exception as e:
        logger.error(f"Error crítico durante la sincronización: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
    finally:
        db.close()

if __name__ == "__main__":
    run_sync()
