-- SOLO PROPUESTA PARA REVISION DEL RESPONSABLE DE BD. NO EJECUTADA.
-- No contiene credenciales ni datos productivos. No sustituye el esquema autorizado.
-- Ejecutar cualquier sentencia manualmente solo despues de contrastar la BD importada.

-- 1. Diagnostico de estructura (solo metadata).
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME IN (
    'notificaciones', 'notificaciones_x_usuarios', 'notificaciones_configuracion',
    'tipo_notificaciones', 'documento_notificaciones',
    'requisicion_notificaciones', 'requisicion_notificaciones_x_usuarios',
    'modificacion_firma_notificaciones', 'modificacion_firma_notificacion_x_usuarios'
  )
ORDER BY TABLE_NAME, ORDINAL_POSITION;

-- 2. Relaciones/cascadas requeridas por eliminaciones funcionales del legacy.
SELECT k.TABLE_NAME, k.COLUMN_NAME, k.REFERENCED_TABLE_NAME,
       k.REFERENCED_COLUMN_NAME, r.DELETE_RULE
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE k
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS r
  ON r.CONSTRAINT_SCHEMA = k.CONSTRAINT_SCHEMA
 AND r.CONSTRAINT_NAME = k.CONSTRAINT_NAME
 AND r.TABLE_NAME = k.TABLE_NAME
WHERE k.TABLE_SCHEMA = DATABASE()
  AND k.TABLE_NAME IN (
    'notificaciones_x_usuarios', 'documento_notificaciones',
    'documento_notificacion_x_usuarios', 'requisicion_notificaciones_x_usuarios',
    'modificacion_firma_notificaciones', 'modificacion_firma_notificacion_x_usuarios'
  );

-- 3. Diagnostico de configuracion, SOLO si la tabla existe.
-- Clave ausente, NULL o 0: campana sin corte. Positivo: compara ID de RELACION.
-- SELECT clave, valor FROM notificaciones_configuracion WHERE clave = 'campana_baseline_id';

-- 4. DDL minimo propuesto SOLO si falta la tabla de configuracion.
-- No se inserta un corte nuevo: calcular MAX(id) ocultaria pendientes existentes.
-- CREATE TABLE notificaciones_configuracion (
--     clave VARCHAR(191) NOT NULL PRIMARY KEY,
--     valor TEXT NULL
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 5. Columnas exigidas por el codigo final y ausentes en las migrations de 2023.
-- Son propuestas individuales: aplicar UNICAMENTE la columna realmente faltante,
-- contrastando antes el esquema final autorizado; no ejecutar como lote indiscriminado.
-- ALTER TABLE notificaciones ADD COLUMN mensaje TEXT NULL;
-- ALTER TABLE notificaciones ADD COLUMN modulo VARCHAR(191) NULL;
-- ALTER TABLE notificaciones ADD COLUMN tabla_origen VARCHAR(191) NULL;
-- ALTER TABLE notificaciones ADD COLUMN id_origen INT UNSIGNED NULL;
-- ALTER TABLE notificaciones ADD COLUMN requiere_accion TINYINT UNSIGNED NULL DEFAULT 0;
-- ALTER TABLE notificaciones ADD COLUMN estatus TINYINT UNSIGNED NOT NULL DEFAULT 1;
-- ALTER TABLE notificaciones_x_usuarios ADD COLUMN atendido TINYINT UNSIGNED NULL DEFAULT 0;
-- ALTER TABLE notificaciones_x_usuarios ADD COLUMN fecha_visto DATETIME NULL;
-- ALTER TABLE notificaciones_x_usuarios ADD COLUMN fecha_atendido DATETIME NULL;

-- 6. Diagnostico de relaciones huerfanas/duplicadas, SOLO con tablas completas.
-- No elimina, reasigna, reactiva ni marca avisos automaticamente.
-- SELECT COUNT(*) AS relaciones_sin_padre
-- FROM notificaciones_x_usuarios nxu LEFT JOIN notificaciones n USING (id_notificacion)
-- WHERE n.id_notificacion IS NULL;
-- SELECT COUNT(*) AS relaciones_sin_usuario
-- FROM notificaciones_x_usuarios nxu LEFT JOIN usuarios u USING (id_usuario)
-- WHERE u.id_usuario IS NULL;
-- SELECT id_notificacion, id_usuario, COUNT(*) AS relaciones
-- FROM notificaciones_x_usuarios GROUP BY id_notificacion, id_usuario HAVING COUNT(*) > 1;

-- 7. Datos: no se proponen INSERT de usuarios/permisos/tipos ni conversiones masivas
-- de ACTIVO/CERRADO o tablas de origen. Requieren identificar el evento historico real.
-- Los tipos 1/5/6 referidos por los productores deben existir en tipo_notificaciones.
-- Los historicos de Modificaciones no deben deduplicarse por id_origen:
-- varios avisos manuales hermanos son legitimos y se cierran por id_notificacion exacto.
