-- tb_report — snapshots de relatórios gerados (cron 20h ou manual via UI).
--
-- 1 linha = 1 snapshot de relatório. O payload completo vai em JSON, evitando
-- recalcular agregados ao abrir o relatório (consulta é só SELECT pelo id).
--
-- Tipos suportados (Ciclo 22, 2026-06-10):
--   * report_category='campaign' + report_type='daily_summary' — resumo do dia
--     com KPIs (apoiadores, contatos, disparos, respostas, +/−), breakdown por
--     apoiador e sugestões algorítmicas de melhoria.
--
-- UNIQUE (id_campaign, report_type, report_date) garante idempotência: regerar
-- o relatório do mesmo dia sobrescreve via ON DUPLICATE KEY UPDATE.

CREATE TABLE IF NOT EXISTS `tb_report` (
  `id_report` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `id_campaign` bigint(20) unsigned NOT NULL,
  `report_category` enum('campaign','supporter','contact') NOT NULL DEFAULT 'campaign',
  `report_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `report_date` date NOT NULL,
  `report_title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
  `report_payload` json NOT NULL,
  `report_generated_by` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
  `report_generated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `report_status` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id_report`),
  UNIQUE KEY `ux_camp_type_date` (`id_campaign`,`report_type`,`report_date`),
  KEY `ix_camp_date` (`id_campaign`,`report_date`),
  KEY `ix_category_type` (`report_category`,`report_type`),
  CONSTRAINT `fk_report_campaign` FOREIGN KEY (`id_campaign`)
      REFERENCES `tb_campaign` (`id_campaign`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
