-- Migration v105: integração WhatsApp via Evolution API
-- Tabelas: configuração, tokens de confirmação, logs de envio
-- Permissões: evolution_whatsapp_view, evolution_whatsapp_config

-- ─── Configuração da instância Evolution ────────────────────────────────────
CREATE TABLE IF NOT EXISTS `evolution_whatsapp_config` (
  `id`                  INT(11)         NOT NULL AUTO_INCREMENT,
  `api_url`             VARCHAR(500)    NOT NULL DEFAULT '' COMMENT 'URL base da Evolution API, ex: https://evolution.exemplo.com',
  `api_key`             VARCHAR(255)    NOT NULL DEFAULT '' COMMENT 'Bearer token da Evolution API',
  `instance_name`       VARCHAR(100)    NOT NULL DEFAULT '' COMMENT 'Nome da instância criada na Evolution',
  `ativo`               TINYINT(1)      NOT NULL DEFAULT 0,
  `confirmacao_ativa`   TINYINT(1)      NOT NULL DEFAULT 0 COMMENT 'Envia botões confirmar/reagendar após agendamento',
  `lembrete_ativo`      TINYINT(1)      NOT NULL DEFAULT 0 COMMENT 'Envia lembrete X horas antes da consulta',
  `lembrete_horas`      TINYINT UNSIGNED NOT NULL DEFAULT 24,
  `resultado_bs_ativo`  TINYINT(1)      NOT NULL DEFAULT 0 COMMENT 'Notifica paciente quando resultado BS estiver disponível',
  `webhook_secret`      VARCHAR(128)    NOT NULL DEFAULT '' COMMENT 'Segredo compartilhado com n8n (header X-Evolution-Secret)',
  `tpl_confirmacao`     TEXT            COMMENT 'Template da mensagem de confirmação (suporta {nome}, {data}, {hora}, {medico})',
  `tpl_lembrete`        TEXT            COMMENT 'Template do lembrete (suporta {nome}, {data}, {hora}, {medico})',
  `tpl_resultado_bs`    TEXT            COMMENT 'Template de notificação de resultado BS (suporta {nome}, {link})',
  `updated_at`          TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Garante exatamente uma linha de configuração
INSERT IGNORE INTO `evolution_whatsapp_config` (`id`) VALUES (1);

-- ─── Tokens de confirmação por agendamento ───────────────────────────────────
CREATE TABLE IF NOT EXISTS `evolution_confirmacoes` (
  `id`                INT(11)         NOT NULL AUTO_INCREMENT,
  `agendamento_id`    INT(11)         NOT NULL,
  `token`             CHAR(64)        NOT NULL COMMENT 'Token hex 256-bit, uso único',
  `numero_whatsapp`   VARCHAR(20)     NOT NULL COMMENT 'Número normalizado (55DDDNNNNNNNNN)',
  `acao_realizada`    ENUM('confirmar','reagendar') DEFAULT NULL COMMENT 'Preenchido quando paciente responde',
  `enviado_em`        DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `respondido_em`     DATETIME        DEFAULT NULL,
  `expires_at`        DATETIME        NOT NULL COMMENT 'TTL do token (padrão: 7 dias após envio)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_token` (`token`),
  KEY `idx_agendamento` (`agendamento_id`),
  KEY `idx_expires_at` (`expires_at`),
  CONSTRAINT `fk_evconf_agendamento`
    FOREIGN KEY (`agendamento_id`) REFERENCES `agendamentos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ─── Log de todas as mensagens enviadas ─────────────────────────────────────
CREATE TABLE IF NOT EXISTS `evolution_whatsapp_logs` (
  `id`               INT(11)      NOT NULL AUTO_INCREMENT,
  `tipo`             ENUM('confirmacao','lembrete','resultado_bs','manual','erro') NOT NULL,
  `paciente_id`      INT(11)      DEFAULT NULL,
  `referencia_id`    INT(11)      DEFAULT NULL COMMENT 'ID do agendamento ou resultado BS',
  `referencia_tipo`  ENUM('agendamento','bs_resultado') DEFAULT NULL,
  `destinatario`     VARCHAR(20)  NOT NULL COMMENT 'Número WhatsApp (55DDDNNNNNNNNN)',
  `mensagem`         TEXT         NOT NULL,
  `status`           ENUM('enviado','erro','pendente') NOT NULL DEFAULT 'pendente',
  `resposta_api`     TEXT         COMMENT 'JSON bruto retornado pela Evolution API',
  `created_at`       TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_paciente`   (`paciente_id`),
  KEY `idx_referencia` (`referencia_id`, `referencia_tipo`),
  KEY `idx_status`     (`status`),
  KEY `idx_created`    (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ─── Permissões ──────────────────────────────────────────────────────────────
INSERT IGNORE INTO `permissoes` (`nome`, `chave`, `descricao`)
VALUES
  ('Visualizar WhatsApp Evolution', 'evolution_whatsapp_view',   'Visualizar painel WhatsApp Evolution'),
  ('Configurar WhatsApp Evolution', 'evolution_whatsapp_config', 'Configurar integração WhatsApp Evolution');
