-- ---------------------------------------------------------------------------
-- Estado de la última réplica INVERSA aplicada (privado → portal).
--
-- Equivalente manual de la migración
--   database/migrations/2026_08_18_140000_add_estado_replica_to_rsv_reservacion.php
--
-- reservacionVersionReplica — LA PIEZA QUE SUELE OLVIDARSE. El lease por sí solo no ordena
--   nada: dos jobs encolados pueden llegar en orden inverso y el socio vería un cambio
--   deshacerse solo. Con la versión, el portal rechaza con 409 version_obsoleta cualquier
--   snapshot cuya versión sea <= la ya aplicada. bigint: en Reservaciones V2 la versión sube con cada
--   cambio y no se reinicia nunca.
--
-- reservacionHashReplica — corta los reintentos sin tocar una fila. Hash igual al último
--   aplicado → 200 sin_cambios: ni se reescribe el detalle ni se notifica al socio por un
--   snapshot idéntico.
--
-- reservacionFechaReplica — cuándo se aplicó la última. Responde "desde cuándo está
--   desactualizada", que es distinto de reservacionFechaMaestro (cuándo se entregó el control).
--
-- SIN índice: se leen siempre por la PK, ya resuelta vía idReservacionPrivado (que sí tiene
-- su UNIQUE). Un índice aquí sería peso muerto en escritura sin lectura que lo aproveche.
--
-- Referencia: PROPUESTA_REPLICACION_BIDIRECCIONAL_RESERVACIONES.md §8.2, §10.2 y §10.3.
-- ---------------------------------------------------------------------------

ALTER TABLE `rsv_reservacion`
  ADD COLUMN `reservacionVersionReplica` BIGINT NOT NULL DEFAULT 0
      COMMENT 'Ultima replicaSalidaVersion de Reservaciones V2 aplicada. Rechaza versiones obsoletas (409).'
      AFTER `reservacionNoPrivado`,
  ADD COLUMN `reservacionHashReplica` CHAR(64)
      CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
      COMMENT 'sha256 del ultimo snapshot aplicado. Corta reintentos con 200 sin_cambios.'
      AFTER `reservacionVersionReplica`,
  ADD COLUMN `reservacionFechaReplica` DATETIME NULL DEFAULT NULL
      COMMENT 'Instante en que se aplico la ultima replica inversa.'
      AFTER `reservacionHashReplica`;

-- Comprobación
-- SHOW COLUMNS FROM `rsv_reservacion` LIKE 'reservacion%Replica';

-- Reversa
-- ALTER TABLE `rsv_reservacion`
--   DROP COLUMN `reservacionFechaReplica`,
--   DROP COLUMN `reservacionHashReplica`,
--   DROP COLUMN `reservacionVersionReplica`;
