-- ============================================================================
-- Migration 030 - UNIQUE(policy_id, version) su policy_versions (P3 hardening)
-- ----------------------------------------------------------------------------
-- Evita snapshot duplicati della stessa versione di policy (riapprovazioni
-- ripetute con la stessa version creavano righe duplicate, confondendo il diff).
-- Idempotente: aggiunge l'indice solo se assente; de-duplica prima se necessario.
--
--   mysql -h localhost nis2_agile_db -e "source docs/sql/030_policy_versions_unique.sql"
-- ============================================================================

-- 1) Rimuovi eventuali duplicati pre-esistenti (mantieni il piu recente per id)
DELETE pv1 FROM policy_versions pv1
JOIN policy_versions pv2
  ON pv1.policy_id = pv2.policy_id
 AND pv1.version  = pv2.version
 AND pv1.id < pv2.id;

-- 2) Aggiungi UNIQUE solo se non esiste gia
DELIMITER //
DROP PROCEDURE IF EXISTS _mig030 //
CREATE PROCEDURE _mig030()
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM information_schema.STATISTICS
        WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'policy_versions'
          AND INDEX_NAME = 'uq_policy_version'
    ) THEN
        ALTER TABLE policy_versions ADD UNIQUE KEY uq_policy_version (policy_id, version);
    END IF;
END //
DELIMITER ;
CALL _mig030();
DROP PROCEDURE IF EXISTS _mig030;

-- ROLLBACK:
-- ALTER TABLE policy_versions DROP INDEX uq_policy_version;
