-- =====================================================================
-- Tabela: tb_dispatch_item
-- Projeto: f19 — banco w19_clikil41_eleicao
--
-- 1 linha = 1 disparo individual (1 contato destinatário) dentro de uma
-- task de disparo (tb_dispatch). Substitui o array `disparos[]` do JSON.
--
-- item_status (estados pra fluxo simple_reply / complex):
--   sent           — apoiador disparou (registrado via webhook enviar.php)
--   replied        — contato respondeu (webhook receber.php)
--   f19_sending    — f19 iniciou disparo da próxima etapa (orquestrador)
--   f19_sent       — f19 disparou e aguarda resposta da próxima rodada
--   awaiting_eval  — passou delay (2min default) — vai pra fila do chatgpt
--   evaluated      — chatgpt avaliou (positive/negative/neutral)
--   error          — falha em algum step (retry policy a definir)
--
-- item_current_step — número da etapa atual no automation_steps (1-based).
-- Usado pelo orquestrador pra saber qual mensagem disparar a seguir.
-- =====================================================================

CREATE TABLE IF NOT EXISTS `tb_dispatch_item` (
  `id_dispatch_item`     BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `id_dispatch`          BIGINT UNSIGNED NOT NULL,
  `item_contact_phone`   VARCHAR(20)     NOT NULL,
  `item_sent_at`         DATETIME        NOT NULL,
  `item_replied_at`      DATETIME        DEFAULT NULL,
  `item_last_reply_at`   DATETIME        DEFAULT NULL,                  -- usado pelo delay de avaliação
  `item_evaluated_at`    DATETIME        DEFAULT NULL,
  `item_evaluation`      ENUM('positive','negative','neutral','no_reply') DEFAULT NULL,
  `item_status`          ENUM('sent','replied','f19_sending','f19_sent','awaiting_eval','evaluated','error') NOT NULL DEFAULT 'sent',
  `item_sent_text`       VARCHAR(500)    DEFAULT NULL,
  `item_zapi_message_id` VARCHAR(80)     DEFAULT NULL,                  -- pra cruzar com webhook status.php
  `item_current_step`    TINYINT UNSIGNED NOT NULL DEFAULT 1,
  `item_created_at`      DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `item_updated_at`      DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_dispatch_item`),
  UNIQUE KEY `ux_item_disp_contact` (`id_dispatch`, `item_contact_phone`),
  KEY `ix_item_status_last_reply`   (`item_status`, `item_last_reply_at`),
  KEY `ix_item_contact`             (`item_contact_phone`),
  CONSTRAINT `fk_item_dispatch` FOREIGN KEY (`id_dispatch`)
    REFERENCES `tb_dispatch` (`id_dispatch`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
