-- ============================================================
-- Migration: 05_terms_acceptance
-- Sistema de aceptación de términos y condiciones
-- ============================================================

-- Tabla de versiones de términos (cada vez que cambia el documento)
CREATE TABLE IF NOT EXISTS `terms_versions` (
    `id`            INT(11)         NOT NULL AUTO_INCREMENT,
    `version`       VARCHAR(50)     NOT NULL                COMMENT 'Ej: 1.0, 2.0, 2026-03',
    `documento_url` VARCHAR(500)    DEFAULT NULL            COMMENT 'URL pública del documento PDF',
    `documento_nombre` VARCHAR(255) DEFAULT NULL            COMMENT 'Nombre original del archivo',
    `mensaje_aceptacion` TEXT       NOT NULL                COMMENT 'Mensaje que se envía al usuario para aceptar',
    `mensaje_rechazo`    TEXT       NOT NULL                COMMENT 'Mensaje que se envía si el usuario rechaza',
    `forzar_reenvio`     TINYINT(1) NOT NULL DEFAULT 0      COMMENT '1 = reenviar a todos los usuarios aunque ya aceptaron',
    `activa`             TINYINT(1) NOT NULL DEFAULT 1      COMMENT '1 = es la versión vigente',
    `created_at`         TIMESTAMP  NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`         TIMESTAMP  NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_activa` (`activa`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de aceptaciones de usuarios
CREATE TABLE IF NOT EXISTS `terms_acceptance` (
    `id`                INT(11)         NOT NULL AUTO_INCREMENT,
    `user_id`           INT(11)         NOT NULL            COMMENT 'FK a users.id',
    `terms_version_id`  INT(11)         NOT NULL            COMMENT 'FK a terms_versions.id',
    `phone_number`      VARCHAR(20)     NOT NULL            COMMENT 'Copia desnormalizada para auditoría',
    `estado`            ENUM('pendiente','aceptado','rechazado') NOT NULL DEFAULT 'pendiente',
    `fecha_envio`       TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Cuando se envió el mensaje de términos',
    `fecha_respuesta`   TIMESTAMP       NULL DEFAULT NULL   COMMENT 'Cuando el usuario respondió',
    `ip_referencia`     VARCHAR(45)     DEFAULT NULL        COMMENT 'IP del webhook si disponible',
    `created_at`        TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_user_version` (`user_id`, `terms_version_id`),
    KEY `idx_estado` (`estado`),
    KEY `idx_phone` (`phone_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Columna en users para saber si está esperando respuesta de términos
ALTER TABLE `users`
    ADD COLUMN IF NOT EXISTS `terms_pending`     TINYINT(1)  NOT NULL DEFAULT 0
        COMMENT '1 = se enviaron términos y se espera respuesta'
        AFTER `welcome_sent_at`,
    ADD COLUMN IF NOT EXISTS `terms_accepted_at` TIMESTAMP   NULL DEFAULT NULL
        COMMENT 'Última vez que aceptó los términos vigentes'
        AFTER `terms_pending`,
    ADD COLUMN IF NOT EXISTS `terms_version_id`  INT(11)     NULL DEFAULT NULL
        COMMENT 'Versión de términos que aceptó'
        AFTER `terms_accepted_at`;
