-- Migration 048 — Refactor catalogo de feriados: 1 registro por feriado, recorrente, sem ano.
--
-- Card: RES#2 / F10 (redesign).
--
-- Motivacao da decisao do dono (11/05/2026 noite):
--   Migration 047 seedou 336 feriados estaduais/municipais por ano (2026-2030).
--   Dono rejeitou: "A funcao deve ser refatorada de forma simples, objetiva e direta.
--   A ideia eh deixar previamente cadastrados apenas os feriados nacionais, sem
--   limitacao de ano. Ou seja, cadastra o feriado nacional uma unica vez e permite
--   ativar ou desativar esse feriado. Quando chegar a data de validacao, o sistema
--   devera verificar se aquele feriado esta ativo ou desativado."
--
-- Modelo novo:
--   - 1 registro por feriado (sem ano).
--   - Datas fixas: armazena (mes, dia).
--   - Datas moveis: armazena (formula_movel) — calculo Computus em tempo de leitura.
--   - Tipos: nacional, municipal, convencao.
--   - Helper `agente_carregar_feriados()` expande pra todas as datas dentro do range.
--   - Apenas 13 feriados nacionais seedados — operador cadastra municipal/convencao
--     conforme necessidade.
--
-- Decisoes locais (Olivia-KnowledgeBase):
--   1. Tabela `cadastro_feriados` antiga: MANTIDA (rollback facil). Helper passa
--      a ler de `cadastro_feriados_v2`. .down.sql apenas dropa v2.
--   2. UI feriado.php: REESCRITA INTEGRAL (modelo mudou, filtro por ano/UF antigo
--      perdeu sentido).
--
-- Mapeamento de formula_movel (referencia Pascoa = 0):
--   pascoa-48 → Carnaval (segunda)
--   pascoa-47 → Carnaval (terca)
--   pascoa-2  → Sexta-feira da Paixao
--   pascoa    → Pascoa (domingo)
--   pascoa+1  → Segunda-feira de Pascoa (nao oficial no BR, mas suportado)
--   pascoa+60 → Corpus Christi (quinta)
--
-- Restricao: runner sql/migrate.php usa PDO sem DELIMITER, entao nada de
-- procedure/trigger aqui. Single CREATE + INSERTs.

SET SESSION sql_mode = '';

-- ---------- 1) Criacao da tabela v2 ----------
CREATE TABLE IF NOT EXISTS cadastro_feriados_v2 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  descricao VARCHAR(120) NOT NULL
    COMMENT 'nome do feriado (ex: Tiradentes, Padroeira de Natal)',
  tipo ENUM('nacional','municipal','convencao') NOT NULL
    COMMENT 'abrangencia simplificada (dono pediu remocao de estadual/facultativo)',
  uf VARCHAR(2) NULL
    COMMENT 'preenche em municipal/convencao quando aplicavel',
  municipio VARCHAR(120) NULL
    COMMENT 'preenche em municipal',
  regra ENUM('fixo','movel') NOT NULL
    COMMENT 'fixo = mes/dia anuais; movel = baseado na Pascoa (Computus)',
  mes TINYINT UNSIGNED NULL
    COMMENT 'pra regra=fixo: 1-12',
  dia TINYINT UNSIGNED NULL
    COMMENT 'pra regra=fixo: 1-31',
  formula_movel ENUM('pascoa-48','pascoa-47','pascoa-2','pascoa','pascoa+1','pascoa+60') NULL
    COMMENT 'pra regra=movel: offset em dias relativo a Pascoa',
  ativo TINYINT(1) NOT NULL DEFAULT 1
    COMMENT '1=valido, 0=desativado (preserva historico, sem DELETE)',
  criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  criado_por_user_id INT UNSIGNED NULL
    COMMENT 'user que cadastrou (NULL = seed do sistema)',
  atualizado_em DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  atualizado_por_user_id INT UNSIGNED NULL,
  PRIMARY KEY (id),
  UNIQUE KEY uq_desc_tipo_uf_mun (descricao, tipo, uf, municipio),
  KEY idx_tipo_ativo (tipo, ativo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='F10 v2: catalogo recorrente de feriados (sem ano). RES#2.';

-- ---------- 2) Seed dos 13 feriados nacionais ----------
-- Fixos (8) + moveis (5) — sem ano, calculo de data delegado ao helper PHP.
INSERT INTO cadastro_feriados_v2
  (descricao, tipo, uf, municipio, regra, mes, dia, formula_movel, ativo, criado_por_user_id)
VALUES
  ('Confraternizacao Universal','nacional',NULL,NULL,'fixo',1,1,NULL,1,NULL),
  ('Carnaval (segunda)','nacional',NULL,NULL,'movel',NULL,NULL,'pascoa-48',1,NULL),
  ('Carnaval (terca)','nacional',NULL,NULL,'movel',NULL,NULL,'pascoa-47',1,NULL),
  ('Sexta-feira da Paixao','nacional',NULL,NULL,'movel',NULL,NULL,'pascoa-2',1,NULL),
  ('Pascoa','nacional',NULL,NULL,'movel',NULL,NULL,'pascoa',1,NULL),
  ('Tiradentes','nacional',NULL,NULL,'fixo',4,21,NULL,1,NULL),
  ('Dia do Trabalho','nacional',NULL,NULL,'fixo',5,1,NULL,1,NULL),
  ('Corpus Christi','nacional',NULL,NULL,'movel',NULL,NULL,'pascoa+60',1,NULL),
  ('Independencia do Brasil','nacional',NULL,NULL,'fixo',9,7,NULL,1,NULL),
  ('Nossa Senhora Aparecida','nacional',NULL,NULL,'fixo',10,12,NULL,1,NULL),
  ('Finados','nacional',NULL,NULL,'fixo',11,2,NULL,1,NULL),
  ('Proclamacao da Republica','nacional',NULL,NULL,'fixo',11,15,NULL,1,NULL),
  ('Natal','nacional',NULL,NULL,'fixo',12,25,NULL,1,NULL);
