ALTER TABLE `ie_fecha_especial`
  MODIFY `codigo` varchar(60) NOT NULL,
  MODIFY `descripcion` varchar(360) NOT NULL;

CREATE TABLE IF NOT EXISTS `ie_fecha_especial_fuente` (
  `id_fuente` smallint unsigned NOT NULL AUTO_INCREMENT,
  `codigo` varchar(40) NOT NULL,
  `nombre` varchar(160) NOT NULL,
  `tipo` enum('FECHA NO LABORABLE','CALENDARIO CIVICO ESCOLAR','CALENDARIO AMBIENTAL','INSTITUCIONAL') NOT NULL,
  `url_template` varchar(620) NOT NULL,
  `parser` varchar(60) NOT NULL,
  `frecuencia_horas` smallint unsigned NOT NULL DEFAULT 24,
  `ultima_sincronizacion` datetime DEFAULT NULL,
  `proxima_sincronizacion` datetime DEFAULT NULL,
  `ultimo_estado` enum('PENDIENTE','OK','SIN_CAMBIOS','ERROR') NOT NULL DEFAULT 'PENDIENTE',
  `ultimo_mensaje` varchar(520) DEFAULT NULL,
  `ultimo_hash` char(40) DEFAULT NULL,
  `estado` tinyint(1) NOT NULL DEFAULT 1,
  `creado_en` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `actualizado_en` datetime DEFAULT NULL,
  PRIMARY KEY (`id_fuente`),
  UNIQUE KEY `uq_ie_fecha_fuente_codigo` (`codigo`),
  KEY `idx_ie_fecha_fuente_estado` (`estado`, `proxima_sincronizacion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `ie_fecha_especial_sync_log` (
  `id_sync_log` int unsigned NOT NULL AUTO_INCREMENT,
  `id_fuente` smallint unsigned DEFAULT NULL,
  `id_anio_lectivo` smallint unsigned NOT NULL,
  `iniciado_en` datetime NOT NULL,
  `finalizado_en` datetime DEFAULT NULL,
  `estado` enum('OK','SIN_CAMBIOS','ERROR') NOT NULL,
  `registros_detectados` smallint unsigned NOT NULL DEFAULT 0,
  `registros_insertados` smallint unsigned NOT NULL DEFAULT 0,
  `registros_actualizados` smallint unsigned NOT NULL DEFAULT 0,
  `mensaje` varchar(700) DEFAULT NULL,
  PRIMARY KEY (`id_sync_log`),
  KEY `idx_ie_fecha_sync_anio` (`id_anio_lectivo`, `iniciado_en`),
  KEY `idx_ie_fecha_sync_fuente` (`id_fuente`, `iniciado_en`),
  CONSTRAINT `fk_ie_fecha_sync_fuente`
    FOREIGN KEY (`id_fuente`) REFERENCES `ie_fecha_especial_fuente` (`id_fuente`)
    ON UPDATE CASCADE ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `ie_fecha_especial_fuente`
(`codigo`, `nombre`, `tipo`, `url_template`, `parser`, `frecuencia_horas`, `ultimo_estado`, `estado`, `creado_en`, `actualizado_en`)
VALUES
('MINEDU_CIVICO_ESCOLAR', 'MINEDU - Calendario Civico Escolar', 'CALENDARIO CIVICO ESCOLAR',
 'https://www.gob.pe/institucion/minedu/informes-publicaciones/2777923-calendario-civico-escolar',
 'MINEDU_CIVICO_HTML', 24, 'PENDIENTE', 1, NOW(), NOW()),
('MINAM_AMBIENTAL_PERU', 'MINAM/SINIA - Calendario Ambiental Peruano', 'CALENDARIO AMBIENTAL',
 'https://sinia.minam.gob.pe/sites/default/files/archivos/public/docs/Descripci%C3%B3n%20de%20fechas%20-%20Calendario%20Ambiental%20Peruano%20{{year}}.pdf',
 'AMBIENTAL_RECURRENTE', 168, 'PENDIENTE', 1, NOW(), NOW())
ON DUPLICATE KEY UPDATE
nombre = VALUES(nombre),
tipo = VALUES(tipo),
url_template = VALUES(url_template),
parser = VALUES(parser),
frecuencia_horas = VALUES(frecuencia_horas),
estado = 1,
actualizado_en = NOW();
