-- =====================================================================
-- Tabela: tb_campaign_adm_user (adm_user <-> campanha, N:M com papel)
-- Banco:  w19_clikil41_eleicao (operacional)
-- Projeto: f19
--
-- Sustenta:
--   - candidato dono da campanha (id_access=3 na linha)
--   - gerentes atribuídos (id_access=2)
--   - apoiadores da campanha (id_access=4)
--   - admins do sistema operando uma campanha específica (id_access=1)
--
-- Permite: 1 adm_user em N campanhas com papéis distintos.
--
-- REGRA DE NEGÓCIO (validada na camada de aplicação, NÃO no schema):
--   Exatamente 1 candidato ATIVO por campanha:
--     SELECT COUNT(*) FROM tb_campaign_adm_user
--      WHERE id_campaign=? AND id_access=3 AND campaign_adm_user_status=1
--   deve = 1.
--
-- id_access referencia tb_access em w19_clikil41_main (cross-DB, sem FK).
-- =====================================================================

CREATE TABLE IF NOT EXISTS `tb_campaign_adm_user` (
  `id_campaign_adm_user`         BIGINT UNSIGNED  NOT NULL AUTO_INCREMENT,
  `id_campaign`                  BIGINT UNSIGNED  NOT NULL,
  `id_adm_user`                  BIGINT UNSIGNED  NOT NULL,
  `id_access`                    TINYINT UNSIGNED NOT NULL,                 -- papel NESTA campanha (1..4); pode diferir de tb_adm_user.id_access

  `campaign_adm_user_status`     TINYINT(1)       NOT NULL DEFAULT 1,        -- 1 ativo, 0 desligado
  `campaign_adm_user_joined_at`  DATETIME         NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `campaign_adm_user_left_at`    DATETIME         DEFAULT NULL,

  PRIMARY KEY (`id_campaign_adm_user`),
  UNIQUE KEY `uk_cau_pair`     (`id_campaign`,`id_adm_user`),
  KEY `ix_cau_campaign` (`id_campaign`),
  KEY `ix_cau_user`     (`id_adm_user`),
  KEY `ix_cau_access`   (`id_access`),
  KEY `ix_cau_status`   (`campaign_adm_user_status`),
  CONSTRAINT `fk_cau_campaign` FOREIGN KEY (`id_campaign`) REFERENCES `tb_campaign` (`id_campaign`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_cau_user`     FOREIGN KEY (`id_adm_user`) REFERENCES `tb_adm_user` (`id_adm_user`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
