<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
 * Migration pour corriger la contrainte d'unicité sur school_classes.
 *
 * La contrainte UNIQUE(tenant_id, academic_year_id, name) incluait les classes
 * archivées (soft delete), ce qui empêchait de recréer une classe avec le même
 * nom après archivage.
 *
 * Cette migration remplace la contrainte par un index unique partiel qui exclut
 * les lignes archivées (deleted_at IS NOT NULL).
 */
final class Version20260205100000 extends AbstractMigration
{
    public function getDescription(): string
    {
        return 'Replace school_classes unique constraint with partial unique index for soft delete support';
    }

    public function up(Schema $schema): void
    {
        // Supprimer la contrainte unique existante
        $this->addSql('ALTER TABLE school_classes DROP CONSTRAINT IF EXISTS school_classes_tenant_id_academic_year_id_name_key');

        // Créer un index unique partiel qui exclut les classes archivées
        $this->addSql(<<<'SQL'
            CREATE UNIQUE INDEX idx_school_classes_unique_name_active
            ON school_classes (tenant_id, academic_year_id, name)
            WHERE deleted_at IS NULL
        SQL);
    }

    public function down(Schema $schema): void
    {
        // Supprimer l'index partiel
        $this->addSql('DROP INDEX IF EXISTS idx_school_classes_unique_name_active');

        // Restaurer la contrainte unique originale
        $this->addSql('ALTER TABLE school_classes ADD CONSTRAINT school_classes_tenant_id_academic_year_id_name_key UNIQUE (tenant_id, academic_year_id, name)');
    }
}
