-- =====================================================================
--  rsv_norma
--  Normas que el socio acepta antes de capturar (tarjetas informativas).
--
--  Proyecto : CL032BACK (Reservaciones en Línea)
--  Archivo  : database/sql/rsv_norma.sql
--  Fecha    : 2026-10-08
--
--  ---------------------------------------------------------------------
--  PARA QUÉ
--  ---------------------------------------------------------------------
--  Antes vivían escritas en el front (normas.js y Nueva.vue): cambiar un
--  texto, el orden o agregar una norma obligaba a publicar el portal.
--  Ahora el front las pide a POST /reservaciones/norma/listar y las pinta
--  tal cual. Una fila por tarjeta y por pantalla:
--
--    normaContexto     pantalla que la muestra
--                        Socio             /reservaciones/reservacion/socio
--                        Invitado          /reservaciones/reservacion/invitado
--                        SolicitudInvitado /invitados/solicitud/nueva
--    normaOrden        posición dentro de su pantalla (ascendente)
--    normaTitulo       título de la tarjeta
--    normaDescripcion  texto de la tarjeta
--    normaIcono        icono: nombre de Bootstrap Icons ('bi-envelope') o
--                      icono propio del portal ('cama', 'cama-solicitud')
--    normaColor        paleta pastel del icono (las de InfoCard.vue)
--    normaEtiqueta     etiqueta junto al icono ('Importante'). NULL = sin
--    normaEstado       Inactivo = no se muestra
--
--  Una norma que aparece en dos pantallas es una fila POR PANTALLA: así
--  cada una conserva su propio orden, icono y color (hoy "Adulto mayor de
--  12 años" no se ve igual en la reservación que en la solicitud).
--
--  Convención (ARQUITECTURA_GENERAL §2): prefijo `rsv_` + entidad `norma`;
--  los campos inician con la entidad (`norma*`), salvo la PK `idNorma`.
--
--  ---------------------------------------------------------------------
--  EJECUCIÓN — ANTES DE DESPLEGAR EL FRONT
--  ---------------------------------------------------------------------
--   1. Usuario ADMINISTRADOR (DDL).
--   2. mysql -u <ADMIN> -p <base> < database/sql/rsv_norma.sql
--
--  ES RE-EJECUTABLE: CREATE TABLE IF NOT EXISTS, y la carga de cada
--  pantalla sólo entra si esa pantalla aún no tiene normas. Correrlo de
--  nuevo NO duplica ni pisa lo que ya se haya editado.
--
--  La carga inicial reproduce EXACTAMENTE lo que el front mostraba antes
--  (textos, orden, iconos y colores).
-- =====================================================================

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS `rsv_norma` (
  `idNorma`          int NOT NULL AUTO_INCREMENT,
  `normaContexto`    enum('Socio','Invitado','SolicitudInvitado') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Pantalla que la muestra',
  `normaOrden`       smallint NOT NULL COMMENT 'Posición dentro de su pantalla (ascendente)',
  `normaTitulo`      varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `normaDescripcion` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `normaIcono`       varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Bootstrap Icons (bi-envelope) o icono propio del portal (cama, cama-solicitud)',
  `normaColor`       enum('green','indigo','red','amber','blue','orange','purple','sky','gold') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Paleta pastel del icono (InfoCard.vue)',
  `normaEtiqueta`    varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Etiqueta junto al icono. NULL = sin etiqueta',
  `normaEstado`      enum('Activo','Inactivo') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'Activo',
  PRIMARY KEY (`idNorma`) USING BTREE,
  INDEX `idx_norma_contexto` (`normaContexto`, `normaEstado`, `normaOrden`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci
  ROW_FORMAT = Dynamic
  COMMENT = 'Normas que el socio acepta antes de reservar o solicitar invitados';

-- ---------------------------------------------------------------------
--  CARGA INICIAL — Socio (/reservaciones/reservacion/socio)
-- ---------------------------------------------------------------------
INSERT INTO `rsv_norma` (`normaContexto`, `normaOrden`, `normaTitulo`, `normaDescripcion`, `normaIcono`, `normaColor`, `normaEtiqueta`, `normaEstado`)
SELECT n.* FROM (
  SELECT 'Socio' AS normaContexto, 1 AS normaOrden, 'Capacidad máxima de personas por habitación' AS normaTitulo, 'Cada habitación permite un máximo de 2 adultos y 2 menores.' AS normaDescripcion, 'bi-people' AS normaIcono, 'green' AS normaColor, NULL AS normaEtiqueta, 'Activo' AS normaEstado
  UNION ALL SELECT 'Socio', 2, 'Adulto mayor de 12 años', 'Toda persona mayor de 12 años se considera adulto para efectos de registro en habitación.', 'bi-person-standing', 'indigo', NULL, 'Activo'
  UNION ALL SELECT 'Socio', 3, 'Límite de habitaciones permitido', 'No es posible agregar más habitaciones que el máximo establecido en el sistema.', 'bi-buildings', 'red', NULL, 'Activo'
  UNION ALL SELECT 'Socio', 4, 'Confirmación por pago', 'Si el pago correspondiente no se refleja dentro de las 24 horas, la reservación será cancelada automáticamente.', 'bi-credit-card', 'green', NULL, 'Activo'
  UNION ALL SELECT 'Socio', 5, 'Confirmación de reservación', 'Los detalles de la reservación llegarán a los correos electrónicos asociados a la membresía.', 'bi-envelope', 'sky', 'Importante', 'Activo'
  UNION ALL SELECT 'Socio', 6, 'Pago de Extras', 'Los cargos por personas o camas extras se calcularán y pagarán al momento de realizar el check-in.', 'cama', 'gold', NULL, 'Activo'
) AS n
WHERE NOT EXISTS (SELECT 1 FROM `rsv_norma` r WHERE r.`normaContexto` = 'Socio');

-- ---------------------------------------------------------------------
--  CARGA INICIAL — Invitado (/reservaciones/reservacion/invitado)
-- ---------------------------------------------------------------------
INSERT INTO `rsv_norma` (`normaContexto`, `normaOrden`, `normaTitulo`, `normaDescripcion`, `normaIcono`, `normaColor`, `normaEtiqueta`, `normaEstado`)
SELECT n.* FROM (
  SELECT 'Invitado' AS normaContexto, 1 AS normaOrden, 'Capacidad máxima de personas por habitación' AS normaTitulo, 'Cada habitación permite un máximo de 2 adultos y 2 menores.' AS normaDescripcion, 'bi-people' AS normaIcono, 'green' AS normaColor, NULL AS normaEtiqueta, 'Activo' AS normaEstado
  UNION ALL SELECT 'Invitado', 2, 'Adulto mayor de 12 años', 'Toda persona mayor de 12 años se considera adulto para efectos de registro en habitación.', 'bi-person-standing', 'indigo', NULL, 'Activo'
  UNION ALL SELECT 'Invitado', 3, 'Ocupación máxima por habitación', 'El límite es 2 adultos y 2 menores; toda persona adicional se contará como extra.', 'bi-person-plus', 'blue', NULL, 'Activo'
  UNION ALL SELECT 'Invitado', 4, 'Costo por persona extra', 'Las personas adicionales generan un cargo extra, el cual incluye la asignación de una cama adicional.', 'cama', 'gold', NULL, 'Activo'
  UNION ALL SELECT 'Invitado', 5, 'Confirmación por pago', 'Si el pago correspondiente no se refleja dentro de las 24 horas, la reservación será cancelada automáticamente.', 'bi-credit-card', 'green', NULL, 'Activo'
  UNION ALL SELECT 'Invitado', 6, 'Confirmación de reservación', 'Los detalles de la reservación llegarán a los correos electrónicos asociados a la membresía.', 'bi-envelope', 'sky', 'Importante', 'Activo'
  UNION ALL SELECT 'Invitado', 7, 'Registro de invitados', 'El número de personas alojadas en cada habitación debe coincidir con los invitados previamente registrados en la solicitud.', 'bi-clipboard-check', 'amber', NULL, 'Activo'
  UNION ALL SELECT 'Invitado', 8, 'Límite de habitaciones', 'En las reservaciones para invitados, no se podrá reservar menos habitaciones al número aprobado en la solicitud.', 'bi-buildings', 'red', NULL, 'Activo'
  UNION ALL SELECT 'Invitado', 9, 'Política de acceso', 'Los invitados deben estar acompañados por un socio.', 'bi-shield-check', 'purple', NULL, 'Activo'
) AS n
WHERE NOT EXISTS (SELECT 1 FROM `rsv_norma` r WHERE r.`normaContexto` = 'Invitado');

-- ---------------------------------------------------------------------
--  CARGA INICIAL — Solicitud de invitados (/invitados/solicitud/nueva)
-- ---------------------------------------------------------------------
INSERT INTO `rsv_norma` (`normaContexto`, `normaOrden`, `normaTitulo`, `normaDescripcion`, `normaIcono`, `normaColor`, `normaEtiqueta`, `normaEstado`)
SELECT n.* FROM (
  SELECT 'SolicitudInvitado' AS normaContexto, 1 AS normaOrden, 'Uso exclusivo para hotel' AS normaTitulo, 'Solo para gestionar invitaciones destinadas a reservas de hotel.' AS normaDescripcion, 'bi-building' AS normaIcono, 'green' AS normaColor, NULL AS normaEtiqueta, 'Activo' AS normaEstado
  UNION ALL SELECT 'SolicitudInvitado', 2, 'Tenga a mano la información del invitado', 'Tenga listas los documentos con fotografía del invitado.', 'bi-card-list', 'indigo', NULL, 'Activo'
  UNION ALL SELECT 'SolicitudInvitado', 3, 'Validación de información', 'Los datos capturados en la solicitud, serán validados al momento del ingreso del invitado.', 'bi-clipboard2-pulse', 'red', NULL, 'Activo'
  UNION ALL SELECT 'SolicitudInvitado', 4, 'Requiere aprobación', 'La solicitud de invitados queda sujeta a la aprobación de la Junta Directiva.', 'bi-file-earmark-check', 'amber', NULL, 'Activo'
  UNION ALL SELECT 'SolicitudInvitado', 5, 'Notificación de aprobación', 'Recibirá un correo si su solicitud de invitados es aprobada.', 'bi-envelope', 'blue', NULL, 'Activo'
  UNION ALL SELECT 'SolicitudInvitado', 6, 'La solicitud no garantiza habitación', 'Tras la aprobación, deberá crear la reservación para los invitados.', 'cama-solicitud', 'orange', NULL, 'Activo'
  UNION ALL SELECT 'SolicitudInvitado', 7, 'Adulto mayor de 12 años', 'Toda persona mayor de 12 años se considera adulto para efectos de registro en habitación.', 'bi-person', 'blue', NULL, 'Activo'
  UNION ALL SELECT 'SolicitudInvitado', 8, 'Ocupación máxima por habitación', 'El límite es 2 adultos y 2 menores; toda persona adicional se contará como extra.', 'bi-people', 'blue', NULL, 'Activo'
  UNION ALL SELECT 'SolicitudInvitado', 9, 'Política de acceso', 'Los invitados deben estar acompañados por un socio.', 'bi-shield-check', 'purple', NULL, 'Activo'
) AS n
WHERE NOT EXISTS (SELECT 1 FROM `rsv_norma` r WHERE r.`normaContexto` = 'SolicitudInvitado');

-- ---------------------------------------------------------------------
--  VERIFICACIÓN
-- ---------------------------------------------------------------------
--  SELECT `normaContexto`, `normaOrden`, `normaTitulo`, `normaIcono`, `normaColor`, `normaEtiqueta`
--    FROM `rsv_norma`
--   WHERE `normaEstado` = 'Activo'
--   ORDER BY `normaContexto`, `normaOrden`;
--  Esperado: Socio 6, Invitado 9, SolicitudInvitado 9.
