-- Ajuste de columna 'codigo' en modulos y reintento de alta de ADMIN_AUDITORIA
-- Ejecuta: mysql -u mihogar_user -p mihogar_db < sql/migracion_2025_fix_modulos_codigo.sql

-- 1) Asegurar que la columna 'codigo' existe y tiene un valor por defecto
ALTER TABLE modulos
    MODIFY COLUMN codigo VARCHAR(80) NOT NULL DEFAULT '' AFTER clave;

-- 2) Sincronizar 'codigo' con 'clave' en los módulos existentes si estuvieran vacíos
UPDATE modulos SET codigo = clave WHERE codigo IS NULL OR codigo = '';

-- 3) Renombrar claves y códigos a los usados en el código (idempotente)
UPDATE modulos SET clave = 'FINANZAS', codigo = 'FINANZAS', nombre = 'Finanzas - Movimientos'
WHERE clave IN ('MOD_1') OR codigo IN ('MOD_1');

UPDATE modulos SET clave = 'FINANZAS_INFORMES', codigo = 'FINANZAS_INFORMES', nombre = 'Finanzas - Informes'
WHERE clave IN ('MOD_2') OR codigo IN ('MOD_2');

UPDATE modulos SET clave = 'ADMIN_USUARIOS', codigo = 'ADMIN_USUARIOS', nombre = 'Administración de usuarios'
WHERE clave IN ('MOD_3') OR codigo IN ('MOD_3');

UPDATE modulos SET clave = 'ALMACEN', codigo = 'ALMACEN', nombre = 'Almacenes e inventario'
WHERE clave IN ('MOD_4') OR codigo IN ('MOD_4');

UPDATE modulos SET clave = 'ADMIN_BACKUPS', codigo = 'ADMIN_BACKUPS', nombre = 'Copias de seguridad'
WHERE clave IN ('MOD_5') OR codigo IN ('MOD_5');

-- 4) Insertar el módulo de auditoría con 'codigo' definido si falta
INSERT INTO modulos (clave, codigo, nombre, activo)
SELECT 'ADMIN_AUDITORIA', 'ADMIN_AUDITORIA', 'Auditoría', 1
WHERE NOT EXISTS (SELECT 1 FROM modulos WHERE clave = 'ADMIN_AUDITORIA' OR codigo = 'ADMIN_AUDITORIA');

-- 5) Asegurar permisos completos del rol ADMIN (id=1) sobre todos los módulos
UPDATE permisos_modulos_rol
SET puede_ver = 1, puede_crear = 1, puede_editar = 1, puede_borrar = 1, puede_exportar = 1
WHERE rol_id = 1;

-- 6) Insertar permiso del rol ADMIN sobre ADMIN_AUDITORIA si no existe
INSERT INTO permisos_modulos_rol (rol_id, modulo_id, puede_ver, puede_crear, puede_editar, puede_borrar, puede_exportar)
SELECT 1, m.id, 1, 1, 1, 1, 1
FROM modulos m
WHERE m.clave = 'ADMIN_AUDITORIA'
  AND NOT EXISTS (
        SELECT 1 FROM permisos_modulos_rol pmr
        WHERE pmr.rol_id = 1 AND pmr.modulo_id = m.id
  );

-- Fin
