-- =====================================================================
-- MIGRATION 004  (Bloco 6 — Agenda e Compromissos)
-- Ajustes na tabela JÁ EXISTENTE `agenda_events`. NENHUMA tabela nova.
--   * status do compromisso (requisito central do bloco)
--   * region_id (agenda territorial; alimenta o futuro mapa)
--   * ampliação do ENUM `type` (audiência, compromisso interno/externo)
-- IDEMPOTENTE: pode rodar mais de uma vez sem erro.
-- Em instalação nova, o database.sql já contém tudo isto.
-- =====================================================================

DROP PROCEDURE IF EXISTS sgg_add_col;
DROP PROCEDURE IF EXISTS sgg_add_idx;
DROP PROCEDURE IF EXISTS sgg_add_fk;
DELIMITER //
CREATE PROCEDURE sgg_add_col(IN tbl VARCHAR(64), IN col VARCHAR(64), IN ddl VARCHAR(255))
BEGIN
  IF NOT EXISTS (SELECT 1 FROM information_schema.columns
    WHERE table_schema=DATABASE() AND table_name=tbl AND column_name=col) THEN
    SET @s=CONCAT('ALTER TABLE `',tbl,'` ADD COLUMN ',ddl); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
  END IF;
END //
CREATE PROCEDURE sgg_add_idx(IN tbl VARCHAR(64), IN idx VARCHAR(64), IN ddl VARCHAR(255))
BEGIN
  IF NOT EXISTS (SELECT 1 FROM information_schema.statistics
    WHERE table_schema=DATABASE() AND table_name=tbl AND index_name=idx) THEN
    SET @s=CONCAT('ALTER TABLE `',tbl,'` ADD ',ddl); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
  END IF;
END //
CREATE PROCEDURE sgg_add_fk(IN tbl VARCHAR(64), IN fk VARCHAR(64), IN ddl VARCHAR(255))
BEGIN
  IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints
    WHERE table_schema=DATABASE() AND table_name=tbl AND constraint_name=fk) THEN
    SET @s=CONCAT('ALTER TABLE `',tbl,'` ADD CONSTRAINT `',fk,'` ',ddl); PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
  END IF;
END //
DELIMITER ;

-- status do compromisso
CALL sgg_add_col('agenda_events','status',
  "status ENUM('agendado','confirmado','realizado','cancelado','reagendado') NOT NULL DEFAULT 'agendado' AFTER notes");
CALL sgg_add_idx('agenda_events','idx_agenda_status','KEY idx_agenda_status (status)');

-- região (agenda territorial)
CALL sgg_add_col('agenda_events','region_id',"region_id BIGINT UNSIGNED NULL AFTER neighborhood_id");
CALL sgg_add_idx('agenda_events','idx_agenda_region','KEY idx_agenda_region (region_id)');
CALL sgg_add_fk('agenda_events','fk_agenda_region',
  "FOREIGN KEY (region_id) REFERENCES regions(id) ON DELETE SET NULL");

-- ampliar ENUM de tipos (mantém os antigos; adiciona audiência e internos/externos)
ALTER TABLE agenda_events
  MODIFY COLUMN type ENUM(
    'reuniao','visita','evento','atendimento','sessao','agenda_externa',
    'audiencia','compromisso_interno','compromisso_externo'
  ) NOT NULL;

DROP PROCEDURE IF EXISTS sgg_add_col;
DROP PROCEDURE IF EXISTS sgg_add_idx;
DROP PROCEDURE IF EXISTS sgg_add_fk;
