-- Migration: Ajout du champ convention_id à la table convention_partenaire
-- Date: 2025-01-XX
-- Description: Ajoute convention_id pour permettre la liaison avec la table conventions génériques

SET @dbname = DATABASE();
SET @tablename = 'convention_partenaire';
SET @column = 'convention_id';

-- Vérifier et ajouter convention_id
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (TABLE_SCHEMA = @dbname)
      AND (TABLE_NAME = @tablename)
      AND (COLUMN_NAME = @column)
  ) > 0,
  'SELECT "La colonne convention_id existe déjà." AS message;',
  CONCAT('ALTER TABLE `', @tablename, '` ADD COLUMN `', @column, '` INT NULL DEFAULT NULL COMMENT "Convention générique" AFTER `id`, ADD INDEX `idx_convention`(`', @column, '` ASC) USING BTREE, ADD CONSTRAINT `convention_partenaire_ibfk_convention` FOREIGN KEY (`', @column, '`) REFERENCES `conventions` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;')
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;

-- Mettre à jour l'enum entity_type pour inclure 'Convention'
-- Vérifier si 'Convention' est déjà dans l'ENUM
SET @preparedStatement2 = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (TABLE_SCHEMA = @dbname)
      AND (TABLE_NAME = @tablename)
      AND (COLUMN_NAME = 'entity_type')
      AND (COLUMN_TYPE LIKE '%\'Convention\'%')
  ) > 0,
  'SELECT "L\'enum entity_type contient déjà Convention." AS message;',
  CONCAT('ALTER TABLE `', @tablename, '` MODIFY COLUMN `entity_type` ENUM(\'Convention_Cadre\',\'Convention_Specifique\',\'Avenant\',\'Projet\',\'Convention\') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;')
));
PREPARE alterIfNotExists2 FROM @preparedStatement2;
EXECUTE alterIfNotExists2;
DEALLOCATE PREPARE alterIfNotExists2;

-- Message de confirmation
SELECT "Migration 006: Ajout du champ convention_id à convention_partenaire terminée avec succès." AS message;

