"""
Script CLI para LIMPIEZA TOTAL del sistema de permisos.
Borra todos los roles, asignaciones y el catálogo de permisos.
Úselo con precaución.

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

import sys
import os
import logging
from sqlalchemy import text

# Configurar logging
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

def run_cleanup():
    """Ejecuta el borrado de tablas en orden de dependencias."""
    logger.warning("INICIANDO LIMPIEZA TOTAL DE PERMISOS Y ROLES...")
    
    db = CoreSessionLocal()
    try:
        # 1. Borrar asignaciones directas de permisos a usuarios
        logger.info("Borrando asignaciones directas de usuario...")
        db.execute(text("DELETE FROM core.user_company_permissions"))
        
        # 2. Borrar relación entre roles y permisos
        logger.info("Borrando mapeo de roles y permisos...")
        db.execute(text("DELETE FROM core.role_permissions"))
        
        # 3. Borrar asignación de roles a usuarios
        logger.info("Borrando asignación de roles a usuarios...")
        db.execute(text("DELETE FROM core.user_company_roles"))
        
        # 4. Borrar los roles mismos
        logger.info("Borrando el catálogo de roles...")
        db.execute(text("DELETE FROM core.company_roles"))
        
        # 5. Borrar el catálogo base de permisos
        logger.info("Borrando el catálogo base de permisos...")
        db.execute(text("DELETE FROM core.permissions"))
        
        db.commit()
        logger.info("=" * 40)
        logger.info("LIMPIEZA COMPLETADA CON ÉXITO")
        logger.info("El sistema de permisos está ahora en blanco.")
        logger.info("=" * 40)
        
    except Exception as e:
        db.rollback()
        logger.error(f"Error crítico durante la limpieza: {e}")
        sys.exit(1)
    finally:
        db.close()

if __name__ == "__main__":
    run_cleanup()
