-- ---------------------------------------------------------------------------
-- REGISTRO DE MIGRACIONES YA APLICADAS A MANO
--
-- Archivo: database/sql/registrar_migraciones_aplicadas.sql
-- Fecha:   2026-08-18
--
-- EL PROBLEMA QUE RESUELVE
--   `php artisan migrate:status` reporta 38 migraciones en Pending. De ellas, 21 YA ESTÁN
--   APLICADAS en la base: se ejecutaron a mano (o con los .sql de database/sql/) y nunca se
--   registraron en la tabla `migrations`.
--
--   Consecuencia: `php artisan migrate` intenta reejecutarlas y ABORTA en la primera con
--   "Table already exists" o "Duplicate column". Como `migrate` corre en orden y se detiene
--   al primer error, el resultado sería un estado a medias — y lo que sí falta nunca llega
--   a aplicarse.
--
--   Este script NO TOCA EL ESQUEMA. Solo escribe las filas de control que faltan, para que
--   `migrate` vuelva a ser utilizable.
--
-- CÓMO SE DETERMINÓ QUÉ REGISTRAR
--   Una por una: se comprobó que su tabla o su columna destino EXISTE de verdad en la base.
--   No se registró ninguna por suposición. Las 17 que no aparecen aquí es porque su objeto
--   NO existe todavía (ver el bloque final).
--
-- IDEMPOTENTE: usa INSERT ... SELECT ... WHERE NOT EXISTS, así que se puede ejecutar varias
-- veces sin duplicar filas ni fallar.
--
-- CÓMO EJECUTAR
--   mysql -u USUARIO -p asturias_api < registrar_migraciones_aplicadas.sql
-- ---------------------------------------------------------------------------

-- Todas entran con el MISMO batch (el siguiente al mayor existente) para que un
-- `migrate:rollback` accidental no las deshaga de una en una en orden arbitrario.
SET @batch := (SELECT IFNULL(MAX(`batch`), 0) + 1 FROM `migrations`);

-- 1) Andamiaje de Laravel / FSG que ya existe en la base
INSERT INTO `migrations` (`migration`, `batch`)
SELECT '0001_01_01_000000_create_users_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '0001_01_01_000000_create_users_table');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '0001_01_01_000002_create_jobs_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '0001_01_01_000002_create_jobs_table');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_01_01_000006_create_base_error_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_01_01_000006_create_base_error_table');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_01_01_000007_create_seg_perfil_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_01_01_000007_create_seg_perfil_table');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_01_01_000008_create_seg_usuario_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_01_01_000008_create_seg_usuario_table');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_01_01_000011_create_seg_menu_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_01_01_000011_create_seg_menu_table');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_01_01_000012_create_seg_perfilusuario_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_01_01_000012_create_seg_perfilusuario_table');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_01_01_000013_create_seg_perfilmenu_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_01_01_000013_create_seg_perfilmenu_table');

-- OJO: 000018 es un DUPLICADO de 000007 (las dos crean seg_perfil). Se registra igual, o
-- `migrate` intentaría crear la tabla otra vez. La limpieza del archivo repetido es aparte.
INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_01_01_000018_create_seg_perfil_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_01_01_000018_create_seg_perfil_table');

-- Idem: dos migraciones para personal_access_tokens (000347 y 000407).
INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_07_15_000347_create_personal_access_tokens_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_07_15_000347_create_personal_access_tokens_table');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_07_15_000407_create_personal_access_tokens_table', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_07_15_000407_create_personal_access_tokens_table');

-- 2) Módulo de Invitados
INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_07_15_130000_add_temporal_to_inv_solicitud_estado', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_07_15_130000_add_temporal_to_inv_solicitud_estado');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_07_16_120000_add_invitado_tipo_to_inv_invitado', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_07_16_120000_add_invitado_tipo_to_inv_invitado');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_08_12_120000_add_transferencia_portal_to_inv_solicitud', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_08_12_120000_add_transferencia_portal_to_inv_solicitud');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_08_13_120000_add_puede_reservar_to_inv_solicitud', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_08_13_120000_add_puede_reservar_to_inv_solicitud');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_08_13_130000_add_replica_to_inv_solicitud', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_08_13_130000_add_replica_to_inv_solicitud');

-- 3) Módulo de Reservaciones
INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_07_17_120000_add_idsolicitud_to_rsv_reservacion', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_07_17_120000_add_idsolicitud_to_rsv_reservacion');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_07_24_120000_add_fechahoracaptura_to_rsv_reservacion', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_07_24_120000_add_fechahoracaptura_to_rsv_reservacion');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_08_04_120000_add_confirmando_to_rsv_reservacion_estado', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_08_04_120000_add_confirmando_to_rsv_reservacion_estado');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_08_05_150000_add_metodopago_to_rsv_reservacion', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_08_05_150000_add_metodopago_to_rsv_reservacion');

INSERT INTO `migrations` (`migration`, `batch`)
SELECT '2026_08_05_170000_add_fechahoraexpira_to_rsv_reservacion', @batch FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM `migrations` WHERE `migration` = '2026_08_05_170000_add_fechahoraexpira_to_rsv_reservacion');


-- ---------------------------------------------------------------------------
-- VERIFICACIÓN
-- ---------------------------------------------------------------------------
-- SELECT `batch`, COUNT(*) AS migraciones FROM `migrations` GROUP BY `batch` ORDER BY `batch`;
--
-- Después, en la aplicación:
--   php artisan migrate:status
-- Deben quedar 17 en Pending (ver abajo), NINGUNA de ellas de los módulos de
-- Reservaciones ni de Invitados.


-- ===========================================================================
-- LO QUE **NO** REGISTRA ESTE SCRIPT, Y POR QUÉ
-- ===========================================================================
--
-- Quedan 17 migraciones en Pending que SÍ están genuinamente sin aplicar: su tabla o su
-- columna NO existe. Se dejan fuera a propósito — registrarlas mentiría sobre el estado de
-- la base, que es justamente el problema que este script viene a corregir.
--
-- A) ANDAMIAJE FSG QUE ESTE PORTAL NO USA (16)
--    cache, gen_accion, base_modulo, base_tabla, base_campo, gen_generacionbitacora,
--    seg_tokenpassword, seg_puntuacionacumulativa, seg_logs, seg_ipbloqueado,
--    seg_bitacoraaccion, seg_bitacora, seg_perfilruta, not_notificacion, not_canal,
--    not_notificacionlog.
--
--    Son el esqueleto del generador y del back-office de FSG. Este portal autentica al
--    socio con `wd_membresia` + Sanctum, bitacoriza en `rsv_bitacora` y notifica con
--    `rsv_notificacion`: no consume ninguna de esas tablas. Ejecutarlas es INOCUO pero
--    innecesario; dejarlas en Pending es honesto.
--
--    ⚠ EXCEPCIÓN A VIGILAR: `cache`. Hoy CACHE_STORE=file, así que no hace falta. Si algún
--      día se cambia a CACHE_STORE=database, esa tabla pasa a ser obligatoria — y de ella
--      depende el THROTTLE de las alertas de replicación (MonitorReservaciones) y el
--      anti-replay por nonce del canal de escritura.
--
-- B) UN DROP REAL PENDIENTE (1)
--    2026_08_04_140000_drop_estadoreplicado_from_rsv_reservacionhabitacion
--
--    La columna `rsv_reservacionhabitacion.reservacionHabitacionEstadoReplicado`
--    enum('Activo','Cancelado','Temporal') SIGUE EXISTIENDO, con 44 filas con valor.
--    Ningún código del proyecto la referencia (verificado con grep sobre app/).
--
--    NO SE INCLUYE AQUÍ PORQUE BORRA DATOS, y este script se anuncia como "no toca el
--    esquema". Si se confirma que esas 44 filas no hacen falta, se ejecuta aparte:
--
--      -- Respaldo antes de soltar la columna:
--      -- CREATE TABLE `bkp_rhabitacion_estadoreplicado` AS
--      --   SELECT `idReservacionHabitacion`, `reservacionHabitacionEstadoReplicado`
--      --     FROM `rsv_reservacionhabitacion`
--      --    WHERE `reservacionHabitacionEstadoReplicado` IS NOT NULL;
--      --
--      -- ALTER TABLE `rsv_reservacionhabitacion`
--      --   DROP COLUMN `reservacionHabitacionEstadoReplicado`;
--      --
--      -- INSERT INTO `migrations` (`migration`, `batch`)
--      -- SELECT '2026_08_04_140000_drop_estadoreplicado_from_rsv_reservacionhabitacion',
--      --        (SELECT IFNULL(MAX(`batch`),0)+1 FROM `migrations` m) FROM DUAL
--      --  WHERE NOT EXISTS (SELECT 1 FROM `migrations`
--      --   WHERE `migration` = '2026_08_04_140000_drop_estadoreplicado_from_rsv_reservacionhabitacion');
--
-- ===========================================================================
-- REVERSA
-- ===========================================================================
-- Deshacer este script es borrar las filas de control que insertó. NO afecta al esquema:
--
-- DELETE FROM `migrations` WHERE `batch` = <el batch que usó este script>;
-- ---------------------------------------------------------------------------
