-- Ajustes de módulos y permisos para alinear con el código actual
-- Ejecuta en MySQL/MariaDB: mysql -u mihogar_user -p mihogar_db < sql/migracion_2025_ajuste_modulos_permisos.sql

-- 1) Asegurar columnas nuevas en modulos
ALTER TABLE modulos
    ADD COLUMN IF NOT EXISTS activo TINYINT(1) NOT NULL DEFAULT 1 AFTER nombre,
    ADD COLUMN IF NOT EXISTS creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER activo;

-- 2) Renombrar claves de módulo a las usadas por el código
UPDATE modulos SET clave = 'FINANZAS', nombre = 'Finanzas - Movimientos'
WHERE clave = 'MOD_1';

UPDATE modulos SET clave = 'FINANZAS_INFORMES', nombre = 'Finanzas - Informes'
WHERE clave = 'MOD_2';

UPDATE modulos SET clave = 'ADMIN_USUARIOS', nombre = 'Administración de usuarios'
WHERE clave = 'MOD_3';

UPDATE modulos SET clave = 'ALMACEN', nombre = 'Almacenes e inventario'
WHERE clave = 'MOD_4';

UPDATE modulos SET clave = 'ADMIN_BACKUPS', nombre = 'Copias de seguridad'
WHERE clave = 'MOD_5';

-- 3) Añadir módulo de auditoría si falta
INSERT INTO modulos (clave, nombre, activo)
SELECT 'ADMIN_AUDITORIA', 'Auditoría', 1
WHERE NOT EXISTS (SELECT 1 FROM modulos WHERE clave = 'ADMIN_AUDITORIA');

-- 4) Asegurar columnas de permisos por rol
ALTER TABLE permisos_modulos_rol
    ADD COLUMN IF NOT EXISTS puede_crear TINYINT(1) NOT NULL DEFAULT 0 AFTER puede_ver,
    ADD COLUMN IF NOT EXISTS puede_editar TINYINT(1) NOT NULL DEFAULT 0 AFTER puede_crear,
    ADD COLUMN IF NOT EXISTS puede_borrar TINYINT(1) NOT NULL DEFAULT 0 AFTER puede_editar,
    ADD COLUMN IF NOT EXISTS puede_exportar TINYINT(1) NOT NULL DEFAULT 0 AFTER puede_borrar;

-- 5) Asegurar columnas de permisos por usuario
ALTER TABLE permisos_usuario_modulo
    ADD COLUMN IF NOT EXISTS puede_ver TINYINT(1) NOT NULL DEFAULT 0 AFTER modulo_id,
    ADD COLUMN IF NOT EXISTS puede_crear TINYINT(1) NOT NULL DEFAULT 0 AFTER puede_ver,
    ADD COLUMN IF NOT EXISTS puede_editar TINYINT(1) NOT NULL DEFAULT 0 AFTER puede_crear,
    ADD COLUMN IF NOT EXISTS puede_borrar TINYINT(1) NOT NULL DEFAULT 0 AFTER puede_editar,
    ADD COLUMN IF NOT EXISTS puede_exportar TINYINT(1) NOT NULL DEFAULT 0 AFTER puede_borrar;

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

-- 7) Insertar permiso de ADMIN sobre módulo de auditoría 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
  );

-- 8) (Opcional) Ajustar claves antiguas en permisos de usuario si las hubiera
UPDATE permisos_usuario_modulo pum
JOIN modulos m ON pum.modulo_id = m.id
SET pum.puede_ver = pum.puede_ver, pum.puede_crear = pum.puede_crear, pum.puede_editar = pum.puede_editar,
    pum.puede_borrar = pum.puede_borrar, pum.puede_exportar = pum.puede_exportar;

-- Fin
