-- ============================================================
-- Migration: 20260302_lab_09_formularios
-- Módulo Formularios: creador drag&drop, envío a clientes, firma
-- ============================================================

-- 1. Plantillas de formularios (diseñadas por admins)
CREATE TABLE IF NOT EXISTS `lab_formularios` (
    `id`              INT(11)      NOT NULL AUTO_INCREMENT,
    `nombre`          VARCHAR(150) NOT NULL,
    `descripcion`     TEXT         DEFAULT NULL,
    `categoria`       ENUM(
                          'consentimiento',
                          'historia_clinica',
                          'autorizacion',
                          'encuesta',
                          'otro'
                      )            NOT NULL DEFAULT 'otro',
    `esquema`         LONGTEXT     NOT NULL COMMENT 'JSON con el array de campos del formulario',
    `permite_firma`   TINYINT(1)   NOT NULL DEFAULT 1,
    `requiere_firma`  TINYINT(1)   NOT NULL DEFAULT 0,
    `version`         SMALLINT     NOT NULL DEFAULT 1,
    `is_active`       TINYINT(1)   NOT NULL DEFAULT 1,
    `creado_por`      INT(11)      DEFAULT NULL,
    `created_at`      TIMESTAMP    NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`      TIMESTAMP    NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_form_activo`   (`is_active`),
    KEY `idx_form_categ`    (`categoria`),
    CONSTRAINT `fk_form_admin` FOREIGN KEY (`creado_por`)
        REFERENCES `admin_users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Plantillas de formularios creadas por administradores';

-- 2. Envíos (instancias de un formulario enviado a un paciente)
CREATE TABLE IF NOT EXISTS `lab_form_envios` (
    `id`              INT(11)      NOT NULL AUTO_INCREMENT,
    `formulario_id`   INT(11)      NOT NULL,
    `paciente_id`     INT(11)      DEFAULT NULL,
    `domicilio_id`    INT(11)      DEFAULT NULL,
    `token`           CHAR(64)     NOT NULL UNIQUE COMMENT 'Token público único para acceso del cliente',
    `datos_prefilled` LONGTEXT     DEFAULT NULL COMMENT 'JSON con datos pre-llenados por el enfermero',
    `datos_cliente`   LONGTEXT     DEFAULT NULL COMMENT 'JSON con respuestas del cliente',
    `firma_svg`       LONGTEXT     DEFAULT NULL COMMENT 'Firma del cliente como SVG/PNG base64',
    `ip_cliente`      VARCHAR(45)  DEFAULT NULL,
    `user_agent`      VARCHAR(512) DEFAULT NULL,
    `estado`          ENUM('pendiente','completado','firmado','expirado') NOT NULL DEFAULT 'pendiente',
    `enviado_por`     INT(11)      DEFAULT NULL COMMENT 'ID admin_users que envió el link',
    `enviado_via`     ENUM('whatsapp','email','link') DEFAULT 'whatsapp',
    `expira_en`       DATETIME     DEFAULT NULL,
    `completado_en`   DATETIME     DEFAULT NULL,
    `created_at`      TIMESTAMP    NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`      TIMESTAMP    NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_fenv_form`      (`formulario_id`),
    KEY `idx_fenv_paciente`  (`paciente_id`),
    KEY `idx_fenv_token`     (`token`),
    KEY `idx_fenv_estado`    (`estado`),
    CONSTRAINT `fk_fenv_form`      FOREIGN KEY (`formulario_id`) REFERENCES `lab_formularios` (`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_fenv_paciente`  FOREIGN KEY (`paciente_id`)   REFERENCES `lab_pacientes`   (`id`) ON DELETE SET NULL,
    CONSTRAINT `fk_fenv_domicilio` FOREIGN KEY (`domicilio_id`)  REFERENCES `lab_domicilios`  (`id`) ON DELETE SET NULL,
    CONSTRAINT `fk_fenv_enviado`   FOREIGN KEY (`enviado_por`)   REFERENCES `admin_users`     (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Instancias de formularios enviados a pacientes';
