-- =============================================================================
--  inv_solicitud — el VEREDICTO de Tlalpan: solicitudPuedeReservar
-- =============================================================================
--  Base de datos : asturias_api  (servidor PÚBLICO, CL032BACK)
--  Archivo       : database/sql/inv_solicitud_add_puede_reservar.sql
--  Fecha         : 2026-08-13
--  Equivale a    : database/migrations/2026_08_13_120000_add_puede_reservar_to_inv_solicitud.php
--
--  MOTIVO
--  ------
--  Hasta hoy el botón "Reservar" del Portal se habilitaba con
--  `solicitudEstado = 'Aceptada'` (Solicitud::puedeReservar). Esa regla dejaba al
--  socio en un círculo cerrado:
--
--    · Toda solicitud del Portal nace Hotel + Cuautla.
--    · La regla Cuautla+Hotel de Tlalpan fuerza esas solicitudes a 'En Espera'
--      cuando el operador las califica; NUNCA llegan a 'Aceptada' por calificación.
--    · El único camino 'En Espera' → 'Aceptada' es que Reservaciones V2 confirme una
--      reservación… que es exactamente la que el socio no podía crear.
--
--  'En Espera' YA ES la autorización del club: la puso el operador al calificar.
--  Lo que falta es la confirmación del hotel, que es justo lo que el socio va a
--  hacer. Por eso 'En Espera' y 'Aceptada' habilitan reservar.
--
--  La columna guarda el VEREDICTO YA CALCULADO EN TLALPAN. El Portal lo consume,
--  no lo deriva — mismo patrón que `wd_bloqueo` (ARQUITECTURA_SERVIDORES.md §7.3).
--
--  ⚠️ EL BACKFILL NO ES OPCIONAL
--  -----------------------------
--  La columna nace `NOT NULL DEFAULT 0`. Sin el UPDATE de abajo, en el instante
--  del ALTER toda solicitud hoy reservable dejaría de serlo hasta que Tlalpan
--  empuje el campo por /invitados/transferencia/estado — una regresión visible
--  para el socio, en producción, el día del despliegue.
--
--  El backfill se ejecuta SOLO cuando la columna se acaba de crear. En una
--  segunda corrida no se vuelve a aplicar: si para entonces Tlalpan ya empujó
--  veredictos, reimponer la derivación por estado los pisaría.
--
--  APLICAR MANUALMENTE
--  -------------------
--    mysql -u <usuario> -p asturias_api < inv_solicitud_add_puede_reservar.sql
--
--  RE-EJECUTABLE: correrlo dos veces seguidas no produce error ni cambia datos.
--  Es un ALTER de solo-adición sobre una tabla InnoDB pequeña; no requiere ventana.
-- =============================================================================

-- -----------------------------------------------------------------------------
--  1. La columna (solo si no existe)
-- -----------------------------------------------------------------------------
SET @columnaExiste := (
    SELECT COUNT(*)
      FROM information_schema.COLUMNS
     WHERE TABLE_SCHEMA = DATABASE()
       AND TABLE_NAME   = 'inv_solicitud'
       AND COLUMN_NAME  = 'solicitudPuedeReservar'
);

SET @sql := IF(@columnaExiste = 0,
    "ALTER TABLE `inv_solicitud`
       ADD COLUMN `solicitudPuedeReservar` tinyint(1) NOT NULL DEFAULT 0
           COMMENT 'Veredicto calculado en Tlalpan: habilita el boton Reservar. NO se calcula aqui.'
           AFTER `solicitudEstado`",
    "SELECT 'inv_solicitud.solicitudPuedeReservar ya existe; no se altera' AS aviso"
);

PREPARE  st FROM @sql;
EXECUTE  st;
DEALLOCATE PREPARE st;

-- -----------------------------------------------------------------------------
--  2. Backfill — SOLO en la creación de la columna
-- -----------------------------------------------------------------------------
--  'En Espera'  → el club autorizó; falta que el socio reserve.
--  'Aceptada'   → autorizada y con reservación ya confirmada por Reservaciones V2.
--
--  Los demás estados quedan en 0: 'Temporal' y 'Solicitada' todavía no pasaron
--  por el operador; 'Pendiente' está en la bandeja; 'Rechazada', 'Rechazada Por
--  Ocupación' y 'Cancelada' no autorizan nada.
-- -----------------------------------------------------------------------------
SET @sql := IF(@columnaExiste = 0,
    "UPDATE `inv_solicitud`
        SET `solicitudPuedeReservar` = 1
      WHERE `solicitudEstado` IN ('En Espera', 'Aceptada')",
    "SELECT 'backfill omitido: la columna ya existia' AS aviso"
);

PREPARE  st FROM @sql;
EXECUTE  st;
DEALLOCATE PREPARE st;

-- -----------------------------------------------------------------------------
--  VERIFICACIÓN (opcional, tras aplicar)
-- -----------------------------------------------------------------------------
-- SHOW CREATE TABLE `inv_solicitud`\G
-- SELECT `solicitudEstado`, `solicitudPuedeReservar`, COUNT(*) AS n
--   FROM `inv_solicitud`
--  GROUP BY `solicitudEstado`, `solicitudPuedeReservar`
--  ORDER BY `solicitudEstado`;
--
--  Esperado tras el backfill: 'En Espera' y 'Aceptada' con solicitudPuedeReservar = 1;
--  todo lo demás en 0.

-- -----------------------------------------------------------------------------
--  ROLLBACK
-- -----------------------------------------------------------------------------
-- ALTER TABLE `inv_solicitud` DROP COLUMN `solicitudPuedeReservar`;
