-- =============================================================================
--  CATÁLOGO DE BITÁCORA — rsv_bitacoraaccion
--  Proyecto : CL032BACK (portal público)   Esquema: asturias_api
--  Archivo  : database/sql/rsv_bitacoraaccion_portal.sql
-- =============================================================================
--
--  ESTE ES EL CATÁLOGO DE ACCIONES DE BITÁCORA DEL PORTAL.
--
--  La app escribe por id: `bitacora(9, ...)`, `bitacora(12, ...)`. Los ids de aquí
--  son los que están escritos en el código, así que NO se renumeran nunca —hay
--  filas de `rsv_bitacora` apuntando a ellos y renumerar reescribe la historia.
--
--  ⇒ EJECUTARLO ANTES DE DESPLEGAR EL CÓDIGO.
--
--  `rsv_bitacora.idBitacoraAccion` tiene FK RESTRICT contra esta tabla. Si la fila
--  no existe el INSERT falla: los flujos de invitados responden 500 con rollback y
--  la purga retiene el registro reportándolo como error. Es intencional — un
--  borrado de datos personales sin constancia es peor que un borrado que no
--  ocurrió.
--
--  CÓMO AGREGAR UNA ACCIÓN NUEVA
--  -----------------------------
--    1. Un bloque INSERT más abajo, con el SIGUIENTE id libre (nunca reciclar uno
--       dado de baja: convertiría los asientos viejos en una mentira).
--    2. Subir el AUTO_INCREMENT del final.
--    3. Usar ese id en el `bitacora(...)` del código.
--    4. Ejecutar el script en CADA esquema (desarrollo, pruebas, producción).
--
--  Idempotente: el guard de cada INSERT va por alias Y por id, así que correrlo
--  dos veces no duplica ni choca.
--
--    mysql -u USUARIO -p asturias_api < rsv_bitacoraaccion_portal.sql
-- =============================================================================


-- ---------- 1 · Validación de número de socio ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 1,
       'Validar',
       'Validación de número de socio',
       'wd_membresia',
       'idMembresia'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Validar'
      OR `idBitacoraAccion` = 1
);

-- ---------- 2 · Envío de código de verificación al socio ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 2,
       'Enviar',
       'Envío de código de verificación al socio',
       'ws_socioverificacion',
       'socioVerificacionCodigo'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Enviar'
      OR `idBitacoraAccion` = 2
);

-- ---------- 3 · Reenvío de código de verificación al socio ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 3,
       'Reenviar',
       'Reenvío de código de verificación al socio',
       'ws_socioverificacion',
       'socioVerificacionCodigo'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Reenviar'
      OR `idBitacoraAccion` = 3
);

-- ---------- 4 · Validación de código e inicio de sesión ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 4,
       'Validar e Iniciar Sesión',
       'Validación de código e inicio de sesión',
       'wd_membresia',
       'wd_membresia'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Validar e Iniciar Sesión'
      OR `idBitacoraAccion` = 4
);

-- ---------- 5 · Cierre de sesión del socio ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 5,
       'Cerrar sesión',
       'Cierre de sesión del socio',
       'wd_membresia',
       'idMembresia'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Cerrar sesión'
      OR `idBitacoraAccion` = 5
);

-- ---------- 6 · Aceptación del aviso de privacidad ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 6,
       'Aceptar aviso',
       'Aceptación del aviso de privacidad',
       'wd_membresia',
       'idMembresia'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Aceptar aviso'
      OR `idBitacoraAccion` = 6
);

-- ---------- 7 · Purga automática de una reservación vencida (histórico del portal) ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 7,
       'Purgar reservación',
       'Purga automática de una reservación vencida (histórico del portal)',
       'rsv_reservacion',
       'idReservacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Purgar reservación'
      OR `idBitacoraAccion` = 7
);

-- ---------- 8 · Purga automática de una solicitud de invitados vencida, con sus documentos ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 8,
       'Purgar solicitud',
       'Purga automática de una solicitud de invitados vencida, con sus documentos',
       'inv_solicitud',
       'idSolicitud'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Purgar solicitud'
      OR `idBitacoraAccion` = 8
);

-- ---------- 9 · Alta o edición de los datos básicos de la solicitud de invitados ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 9,
       'Guardar solicitud',
       'Alta o edición de los datos básicos de la solicitud de invitados',
       'inv_solicitud',
       'idSolicitud'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Guardar solicitud'
      OR `idBitacoraAccion` = 9
);

-- ---------- 10 · Envío de la solicitud de invitados: pasa de Temporal a Solicitada ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 10,
       'Enviar solicitud',
       'Envío de la solicitud de invitados: pasa de Temporal a Solicitada',
       'inv_solicitud',
       'idSolicitud'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Enviar solicitud'
      OR `idBitacoraAccion` = 10
);

-- ---------- 11 · Cancelación por el socio de una solicitud de invitados temporal ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 11,
       'Cancelar solicitud',
       'Cancelación por el socio de una solicitud de invitados temporal',
       'inv_solicitud',
       'idSolicitud'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Cancelar solicitud'
      OR `idBitacoraAccion` = 11
);

-- ---------- 12 · Alta de un invitado dentro de la solicitud ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 12,
       'Agregar invitado',
       'Alta de un invitado dentro de la solicitud',
       'inv_invitado',
       'idInvitado'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Agregar invitado'
      OR `idBitacoraAccion` = 12
);

-- ---------- 13 · Baja de un invitado de la solicitud ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 13,
       'Eliminar invitado',
       'Baja de un invitado de la solicitud',
       'inv_invitado',
       'idInvitado'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Eliminar invitado'
      OR `idBitacoraAccion` = 13
);


-- ---------- 14 · Alta de la reservación temporal del socio (inicio de la captura) ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 14,
       'Crear reservación',
       'Alta de la reservación temporal del socio (inicio de la captura)',
       'rsv_reservacion',
       'idReservacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Crear reservación'
      OR `idBitacoraAccion` = 14
);

-- ---------- 15 · Alta de una habitación en la reservación ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 15,
       'Agregar habitación',
       'Alta de una habitación en la reservación',
       'rsv_reservacionhabitacion',
       'idReservacionHabitacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Agregar habitación'
      OR `idBitacoraAccion` = 15
);

-- ---------- 16 · Baja de una habitación de la reservación, a petición del socio ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 16,
       'Quitar habitación',
       'Baja de una habitación de la reservación, a petición del socio',
       'rsv_reservacionhabitacion',
       'idReservacionHabitacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Quitar habitación'
      OR `idBitacoraAccion` = 16
);

-- ---------- 17 · Cambio de ocupación (adultos/menores) de una habitación de invitado ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 17,
       'Actualizar personas',
       'Cambio de ocupación (adultos/menores) de una habitación de invitado',
       'rsv_reservacionhabitacion',
       'idReservacionHabitacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Actualizar personas'
      OR `idBitacoraAccion` = 17
);

-- ---------- 18 · Cierre de la captura: notas fijadas y paso a la pantalla de pago ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 18,
       'Guardar reservación',
       'Cierre de la captura: notas fijadas y paso a la pantalla de pago',
       'rsv_reservacion',
       'idReservacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Guardar reservación'
      OR `idBitacoraAccion` = 18
);

-- ---------- 19 · Pago recibido: la reservación pasa de Temporal a Confirmando ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 19,
       'Pagar reservación',
       'Pago recibido: la reservación pasa de Temporal a Confirmando',
       'rsv_reservacion',
       'idReservacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Pagar reservación'
      OR `idBitacoraAccion` = 19
);

-- ---------- 20 · Veredicto aceptado por el maestro: Confirmando a Reservado, con folio ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 20,
       'Confirmar reservación',
       'Veredicto aceptado por el maestro: Confirmando a Reservado, con folio',
       'rsv_reservacion',
       'idReservacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Confirmar reservación'
      OR `idBitacoraAccion` = 20
);

-- ---------- 21 · Cancelación de la reservación; el motivo va en el detalle del asiento ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 21,
       'Cancelar reservación',
       'Cancelación de la reservación; el motivo va en el detalle del asiento',
       'rsv_reservacion',
       'idReservacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Cancelar reservación'
      OR `idBitacoraAccion` = 21
);

-- ---------- 22 · Expiración automática de la reservación temporal por vencimiento del plazo ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 22,
       'Expirar reservación',
       'Expiración automática de la reservación temporal por vencimiento del plazo',
       'rsv_reservacion',
       'idReservacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Expirar reservación'
      OR `idBitacoraAccion` = 22
);

-- ---------- 23 · Baja de habitaciones impuesta por un veredicto SIN_CUPO del maestro ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 23,
       'Retirar habitaciones sin cupo',
       'Baja de habitaciones impuesta por un veredicto SIN_CUPO del maestro',
       'rsv_reservacion',
       'idReservacion'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Retirar habitaciones sin cupo'
      OR `idBitacoraAccion` = 23
);

-- ---------- 24 · El socio finalizó un recorrido guiado (product tour) ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 24,
       'Finalizar recorrido guiado',
       'El socio finalizó un recorrido guiado (product tour) de una pantalla',
       'rsv_recorridoguiado',
       'idRecorridoGuiado'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Finalizar recorrido guiado'
      OR `idBitacoraAccion` = 24
);

-- ---------- 25 · El socio omitió un recorrido guiado (product tour) ----------
INSERT INTO `rsv_bitacoraaccion`
  (`idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
SELECT 25,
       'Omitir recorrido guiado',
       'El socio omitió un recorrido guiado (product tour) de una pantalla',
       'rsv_recorridoguiado',
       'idRecorridoGuiado'
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `rsv_bitacoraaccion`
   WHERE `bitacoraAccionAlias` = 'Omitir recorrido guiado'
      OR `idBitacoraAccion` = 25
);


-- ---------- El AUTO_INCREMENT, por encima del último id sembrado ----------
ALTER TABLE `rsv_bitacoraaccion` AUTO_INCREMENT = 26;


-- =============================================================================
--  VERIFICACIÓN — debe devolver 25 filas con los ids de arriba
-- =============================================================================
--  SELECT `idBitacoraAccion`, `bitacoraAccionAlias`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`
--    FROM `rsv_bitacoraaccion`
--   ORDER BY `idBitacoraAccion`;
-- =============================================================================
--  FIN DEL SCRIPT
-- =============================================================================
