-- ---------------------------------------------------------------------------
-- Punteros de origen del detalle: la PK que cada fila tiene en Reservaciones V2.
--
-- Equivalente manual de la migración
--   database/migrations/2026_08_18_130000_add_punteros_privado_to_rsv_detalle.php
-- para aplicarlo directo cuando `php artisan migrate` no esté disponible.
--
-- PARA QUÉ SIRVEN
--   Cuando el privado devuelva cambios (Fase 4), el portal debe decidir por cada fila
--   entrante si ACTUALIZA una que ya tiene o si INSERTA una nueva. Sin un puntero estable
--   esa decisión se tomaría comparando atributos —tipo, fechas, importe— y ahí está la
--   trampa: dos habitaciones idénticas del mismo tipo y las mismas fechas son legítimas, y
--   ambas casarían con la misma fila entrante. Ese es el camino exacto a duplicarle al
--   socio su reservación.
--
--   EL EMPAREJAMIENTO ES SIEMPRE POR PUNTERO, NUNCA POR ATRIBUTOS.
--
-- POR QUÉ EL UNIQUE ES COMPUESTO CON EL PADRE Y NO SUELTO
--   El puntero solo debe ser único DENTRO de su reservación (o de su habitación). Un índice
--   global convertiría un payload mal formado en un 500 por violación de índice, en vez de
--   un rechazo controlado y bitacorado.
--
-- NULL = "aún no adoptada": la fila nació en el portal y no se ha emparejado con su gemela
-- del maestro. MySQL admite múltiples NULL en un índice UNIQUE, así que todo lo anterior a
-- esta fase convive sin conflicto.
--
-- NINGUNA COLUMNA NUEVA EN Reservaciones V2: el mapeo viaja en el veredicto y vive de este lado. Allá
-- esas son las tablas más grandes y más calientes del sistema.
--
-- Referencia: PROPUESTA_REPLICACION_BIDIRECCIONAL_RESERVACIONES.md §8.2 y §8.3.
-- ---------------------------------------------------------------------------

ALTER TABLE `rsv_reservacionhabitacion`
  ADD COLUMN `idReservacionHabitacionPrivado` INT NULL DEFAULT NULL
      COMMENT 'PK de rsv_reservacionhabitacion en Reservaciones V2. NULL = aun no adoptada.'
      AFTER `idReservacion`,
  ADD UNIQUE INDEX `uq_rh_privado` (`idReservacion`, `idReservacionHabitacionPrivado`);

ALTER TABLE `rsv_reservacionhabitacionpaquete`
  ADD COLUMN `idReservacionHabitacionPaquetePrivado` INT NULL DEFAULT NULL
      COMMENT 'PK de rsv_reservacionhabitacionpaquete en Reservaciones V2. NULL = aun no adoptada.'
      AFTER `idReservacionHabitacion`,
  ADD UNIQUE INDEX `uq_rhp_privado` (`idReservacionHabitacion`, `idReservacionHabitacionPaquetePrivado`);

ALTER TABLE `rsv_reservacionhabitacionextra`
  ADD COLUMN `idReservacionHabitacionExtraPrivado` INT NULL DEFAULT NULL
      COMMENT 'PK de rsv_reservacionhabitacionextra en Reservaciones V2. NULL = aun no adoptada.'
      AFTER `idReservacionHabitacion`,
  ADD UNIQUE INDEX `uq_rhe_privado` (`idReservacionHabitacion`, `idReservacionHabitacionExtraPrivado`);

-- Comprobación
-- SHOW COLUMNS FROM `rsv_reservacionhabitacion`        LIKE '%Privado';
-- SHOW COLUMNS FROM `rsv_reservacionhabitacionpaquete` LIKE '%Privado';
-- SHOW COLUMNS FROM `rsv_reservacionhabitacionextra`   LIKE '%Privado';

-- ---------------------------------------------------------------------------
-- REVERSA (índice primero, después la columna que lo sostiene)
-- ---------------------------------------------------------------------------
-- ALTER TABLE `rsv_reservacionhabitacionextra`   DROP INDEX `uq_rhe_privado`;
-- ALTER TABLE `rsv_reservacionhabitacionextra`   DROP COLUMN `idReservacionHabitacionExtraPrivado`;
-- ALTER TABLE `rsv_reservacionhabitacionpaquete` DROP INDEX `uq_rhp_privado`;
-- ALTER TABLE `rsv_reservacionhabitacionpaquete` DROP COLUMN `idReservacionHabitacionPaquetePrivado`;
-- ALTER TABLE `rsv_reservacionhabitacion`        DROP INDEX `uq_rh_privado`;
-- ALTER TABLE `rsv_reservacionhabitacion`        DROP COLUMN `idReservacionHabitacionPrivado`;
