-- =====================================================================
-- MIGRATION 016 (Bloco 13) — Converte ENUM->VARCHAR nos campos de negócio
-- preservando EXATAMENTE os valores (que já são os slugs) e adiciona índices.
-- NÃO mexe em sla_status (permanece ENUM calculado).
-- Idempotente: usa procedure que só altera se a coluna ainda for ENUM.
-- Compatível com MySQL 8 / MariaDB 10.4+.
-- =====================================================================
SET NAMES utf8mb4;

DROP PROCEDURE IF EXISTS sgg_enum_to_varchar;
DELIMITER //
CREATE PROCEDURE sgg_enum_to_varchar(IN p_table VARCHAR(64), IN p_col VARCHAR(64), IN p_default VARCHAR(30))
BEGIN
  DECLARE v_type VARCHAR(20);
  SELECT DATA_TYPE INTO v_type FROM information_schema.columns
    WHERE table_schema=DATABASE() AND table_name=p_table AND column_name=p_col;
  IF v_type = 'enum' THEN
    SET @s = CONCAT('ALTER TABLE `',p_table,'` MODIFY `',p_col,'` VARCHAR(30) NOT NULL DEFAULT ''',p_default,'''');
    PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
  END IF;
END //
DELIMITER ;

CALL sgg_enum_to_varchar('demands','status','nova');
CALL sgg_enum_to_varchar('demands','priority','media');
CALL sgg_enum_to_varchar('technical_visits','status','agendada');
CALL sgg_enum_to_varchar('tasks','status','aberta');
CALL sgg_enum_to_varchar('tasks','priority','media');

DROP PROCEDURE IF EXISTS sgg_enum_to_varchar;

-- Índices de apoio para joins/filtros por status (idempotentes via procedure)
DROP PROCEDURE IF EXISTS sgg_add_idx16;
DELIMITER //
CREATE PROCEDURE sgg_add_idx16(IN p_table VARCHAR(64), IN p_idx VARCHAR(64), IN p_col VARCHAR(64))
BEGIN
  IF NOT EXISTS (SELECT 1 FROM information_schema.statistics
    WHERE table_schema=DATABASE() AND table_name=p_table AND index_name=p_idx) THEN
    SET @s=CONCAT('ALTER TABLE `',p_table,'` ADD KEY `',p_idx,'` (`',p_col,'`)');
    PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
  END IF;
END //
DELIMITER ;
CALL sgg_add_idx16('demands','idx_demands_priority','priority');
CALL sgg_add_idx16('tasks','idx_tasks_status','status');
DROP PROCEDURE IF EXISTS sgg_add_idx16;

-- NOTA: FK real (demands.status -> demand_statuses.slug) exigiria que slug fosse
-- UNIQUE simples (é UNIQUE composto com tenant_id). Mantemos integridade pela
-- aplicação + seed completo, evitando travar operações multi-tenant. Documentado.
