-- =====================================================================
--  rsv_socioverificacion
--  Tabla de códigos de verificación de identidad del socio (login en línea).
--
--  Origen funcional: FSG_ANA_002_R_CL001_PR111_Seguridad_V.00 (HU-001/002).
--  El análisis referencia esta tabla (`rsv_socioverificacion`, campo
--  `socioVerificacionCodigo`) pero no venía en asturias_api.sql. Se crea aquí
--  respetando la ARQUITECTURA_GENERAL:
--    - Prefijo de módulo `ws_` (Web Socio) + entidad `socioverificacion`.
--    - Todos los campos inician con la entidad en camelCase (`socioVerificacion*`),
--      salvo la PK `idSocioVerificacion` y la FK `idMembresia` (patrón id*).
--    - Estados con valores legibles del dominio (no char mágico) — tabla nueva
--      del esquema genérico, sin restricción de migración V1/V2.
--
--  Reglas de negocio cubiertas:
--    RN-SEG-02  código alfanumérico de 6 caracteres  -> socioVerificacionCodigo
--    RN-SEG-03  vigencia de 10 minutos               -> socioVerificacionFechaExpira
--    RN-SEG-08  al reenviar, el contador se reinicia  -> socioVerificacionIntentos
--
--  EJECUCIÓN MANUAL:
--    mysql -u <usuario> -p <base> < database/sql/rsv_socioverificacion.sql
-- =====================================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `rsv_socioverificacion`;

CREATE TABLE `rsv_socioverificacion` (
  `idSocioVerificacion`            int NOT NULL AUTO_INCREMENT,
  `socioVerificacionCodigo`        varchar(6)  CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Código alfanumérico de 6 caracteres (RN-SEG-02)',
  `socioVerificacionMetodo`        enum('Correo','Whatsapp') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Medio por el que se envió el código',
  `socioVerificacionDestinatario`  varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Correo o celular al que se envió (auditoría)',
  `socioVerificacionEstado`        enum('Pendiente','Validado','Expirado','Cancelado') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'Pendiente' COMMENT 'Estado del código de verificación',
  `socioVerificacionIntentos`      int NOT NULL DEFAULT 0 COMMENT 'Reintentos de envío (RN-SEG-08)',
  `socioVerificacionFechaEnvio`    datetime NOT NULL COMMENT 'Momento de envío; inicio de la ventana de 10 min',
  `socioVerificacionFechaExpira`   datetime NOT NULL COMMENT 'Envío + 10 minutos (RN-SEG-03)',
  `socioVerificacionFechaValidacion` datetime NULL DEFAULT NULL COMMENT 'Momento en que el código fue validado',
  `socioVerificacionIP`            varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP de origen (auditoría)',
  `idMembresia`                    int NOT NULL COMMENT 'FK a wd_membresia',
  PRIMARY KEY (`idSocioVerificacion`) USING BTREE,
  INDEX `idx_socioverificacion_membresia` (`idMembresia`) USING BTREE,
  INDEX `idx_socioverificacion_estado_fecha` (`socioVerificacionEstado`, `socioVerificacionFechaExpira`) USING BTREE,
  CONSTRAINT `fk_socioverificacion_membresia`
    FOREIGN KEY (`idMembresia`) REFERENCES `wd_membresia` (`idMembresia`)
    ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci
  ROW_FORMAT = Dynamic
  COMMENT = 'Códigos de verificación de identidad del socio (login en línea)';

-- ---------------------------------------------------------------------
--  Catálogo de acciones de bitácora del módulo de Acceso.
--  rsv_bitacora exige un idBitacoraAccion existente (FK). El catálogo venía
--  vacío, por lo que se siembran las acciones del flujo de login. La app
--  resuelve el id por `bitacoraAccionAlias`, así que estos INSERT son
--  idempotentes vía INSERT ... ON DUPLICATE KEY no aplica (no hay unique en
--  alias); ejecútalos UNA sola vez. Si ya existen, omite este bloque.
-- ---------------------------------------------------------------------
INSERT INTO `rsv_bitacoraaccion`
  (`bitacoraAccionAlias`, `bitacoraAccionDescripcion`, `bitacoraAccionEntidad`, `bitacoraAccionCampo`)
VALUES
  ('Validar',        'Validación de número de socio',                'wd_membresia', 'idMembresia'),
  ('Enviar',   'Envío de código de verificación al socio',      'rsv_socioverificacion', 'socioVerificacionCodigo'),
  ('Reenviar', 'Reenvío de código de verificación al socio',    'rsv_socioverificacion', 'socioVerificacionCodigo'),
  ('Validar e Iniciar Sesión',  'Validación de código e inicio de sesión',       'wd_membresia', 'idMembresia'),
  ('Cerrar sesión',         'Cierre de sesión del socio',                    'wd_membresia',         'idMembresia'),
  ('Aceptar aviso','Aceptación del aviso de privacidad',           'wd_membresia',         'idMembresia');

SET FOREIGN_KEY_CHECKS = 1;
