-- =====================================================================
--  rsv_recorridoguiado
--  Qué hizo cada socio con cada RECORRIDO GUIADO (product tour) del portal.
--
--  Proyecto : CL032BACK (Reservaciones en Línea)
--  Archivo  : database/sql/rsv_recorridoguiado.sql
--  Fecha    : 2026-09-25
--
--  ---------------------------------------------------------------------
--  PARA QUÉ
--  ---------------------------------------------------------------------
--  El recorrido guiado de una pantalla se recuerda POR SOCIO y no por
--  navegador: quien lo terminó en la computadora no vuelve a verlo en el
--  teléfono. Una fila por (socio, recorrido):
--
--    recorridoGuiadoClave            qué recorrido ('reservacion-socio',
--                                    'reservacion-invitado', ...)
--    recorridoGuiadoFinalizadoFecha  última vez que pulsó "Finalizar"
--    recorridoGuiadoOmitidoFecha     última vez que pulsó "Omitir"
--
--  Si se vuelve a mostrar, y cuándo, lo decide RecorridoGuiadoService según
--  config/reservacion.php (`recorrido_guiado.modo`: una_vez | cada_sesion).
--
--  Tabla propia, y no columnas en wd_membresia, para que un recorrido nuevo
--  en OTRO módulo sea sólo una clave más: no hace falta tocar el esquema.
--  Además wd_membresia es una réplica del padrón y una recarga manual la
--  dejaría en blanco.
--
--  Convención (ARQUITECTURA_GENERAL §2): prefijo `rsv_` + entidad
--  `recorridoguiado`; los campos inician con la entidad en camelCase
--  (`recorridoGuiado*`), salvo la PK `idRecorridoGuiado` y la FK `idMembresia`.
--
--  ---------------------------------------------------------------------
--  EJECUCIÓN — ANTES DE DESPLEGAR EL CÓDIGO
--  ---------------------------------------------------------------------
--   1. Usuario ADMINISTRADOR (DDL).
--   2. mysql -u <ADMIN> -p <base> < database/sql/rsv_recorridoguiado.sql
--   3. Ejecutar también database/sql/rsv_bitacoraaccion_portal.sql, que trae
--      las acciones 24 (Finalizar recorrido guiado) y 25 (Omitir recorrido
--      guiado) que escribe el controlador.
--
--  ES RE-EJECUTABLE: CREATE TABLE IF NOT EXISTS. Correrlo de nuevo NO borra
--  lo que los socios ya registraron.
--
--  Si el código se despliega antes que este script, el portal sigue
--  funcionando: el recorrido simplemente no se muestra solo (queda en el
--  log) hasta que la tabla exista.
-- =====================================================================

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS `rsv_recorridoguiado` (
  `idRecorridoGuiado`              int NOT NULL AUTO_INCREMENT,
  `recorridoGuiadoClave`           varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Recorrido: reservacion-socio, reservacion-invitado, ... (catálogo en RecorridoGuiadoService)',
  `recorridoGuiadoFinalizadoFecha` datetime NULL DEFAULT NULL COMMENT 'Última vez que el socio pulsó Finalizar. NULL = nunca',
  `recorridoGuiadoOmitidoFecha`    datetime NULL DEFAULT NULL COMMENT 'Última vez que el socio pulsó Omitir. NULL = nunca',
  `idMembresia`                    int NOT NULL COMMENT 'FK a wd_membresia',
  PRIMARY KEY (`idRecorridoGuiado`) USING BTREE,
  UNIQUE INDEX `uk_recorridoguiado_membresia_clave` (`idMembresia`, `recorridoGuiadoClave`) USING BTREE,
  CONSTRAINT `fk_recorridoguiado_membresia`
    FOREIGN KEY (`idMembresia`) REFERENCES `wd_membresia` (`idMembresia`)
    ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci
  ROW_FORMAT = Dynamic
  COMMENT = 'Recorridos guiados (product tour) finalizados u omitidos por cada socio';

-- ---------------------------------------------------------------------
--  VERIFICACIÓN
-- ---------------------------------------------------------------------
--  SELECT `recorridoGuiadoClave`,
--         SUM(`recorridoGuiadoFinalizadoFecha` IS NOT NULL) AS finalizados,
--         SUM(`recorridoGuiadoOmitidoFecha` IS NOT NULL)    AS omitidos
--    FROM `rsv_recorridoguiado`
--   GROUP BY `recorridoGuiadoClave`;
