-- ============================================================================
-- Changements de la base polysco_db (migration SUPMTI V2 -> Polysco Pro)
-- Équivalent SQL des migrations 2026_10_20_100000 à 2026_10_21_200000.
-- À exécuter UNE fois, dans l'ordre. Alternative : php artisan migrate.
-- ============================================================================

START TRANSACTION;

-- ----------------------------------------------------------------------------
-- 1. Dossiers (pièces à fournir) par diplôme × nationalité (M = Marocain, E = autre)
--    2026_10_20_100000_dossiers_par_diplome
-- ----------------------------------------------------------------------------
ALTER TABLE n_groupes_criteres MODIFY gc_classe_id BIGINT UNSIGNED NULL;
ALTER TABLE n_groupes_criteres
    ADD COLUMN gc_diplome_id BIGINT UNSIGNED NULL AFTER gc_classe_id,
    ADD COLUMN gc_portee CHAR(1) NULL COMMENT 'M = Marocain, E = autre nationalité (liste par diplôme)' AFTER gc_diplome_id,
    ADD CONSTRAINT n_groupes_criteres_gc_diplome_id_foreign FOREIGN KEY (gc_diplome_id) REFERENCES n_diplomes (dip_id) ON DELETE CASCADE,
    ADD UNIQUE KEY uq_gc_diplome_portee (gc_diplome_id, gc_portee),
    ADD CONSTRAINT chk_gc_portee CHECK (gc_portee IS NULL OR gc_portee IN ('M', 'E')),
    ADD CONSTRAINT chk_gc_cible CHECK ((gc_classe_id IS NOT NULL AND gc_diplome_id IS NULL AND gc_portee IS NULL) OR (gc_classe_id IS NULL AND gc_diplome_id IS NOT NULL AND gc_portee IS NOT NULL));

-- ----------------------------------------------------------------------------
-- 2. Dossiers aussi par diplôme d'accès (Bac, DUT, DTS/BTS, Licence…)
--    2026_10_20_200000_dossiers_par_diplome_acces
-- ----------------------------------------------------------------------------
ALTER TABLE n_groupes_criteres
    ADD COLUMN gc_acces_id BIGINT UNSIGNED NULL AFTER gc_portee,
    ADD COLUMN gc_acces_key BIGINT UNSIGNED AS (IFNULL(gc_acces_id, 0)) STORED,
    ADD CONSTRAINT n_groupes_criteres_gc_acces_id_foreign FOREIGN KEY (gc_acces_id) REFERENCES n_types_diplomes_acces (tda_id),
    ADD UNIQUE KEY uq_gc_diplome_portee_acces (gc_diplome_id, gc_portee, gc_acces_key),
    ADD CONSTRAINT chk_gc_acces CHECK (gc_acces_id IS NULL OR gc_diplome_id IS NOT NULL);
ALTER TABLE n_groupes_criteres DROP INDEX uq_gc_diplome_portee;

-- ----------------------------------------------------------------------------
-- 3. Suppression du mode d'admission (le mode reste sur l'inscription : n_inscriptions.ins_mode_id)
--    2026_10_20_300000_supprimer_mode_admission
-- ----------------------------------------------------------------------------
ALTER TABLE n_admissions DROP FOREIGN KEY n_admissions_adm_mode_id_foreign;
ALTER TABLE n_admissions DROP COLUMN adm_mode_id;

-- ----------------------------------------------------------------------------
-- 4. Plans de paiement par diplôme × mode d'enseignement, sans montant
--    2026_10_21_100000 + 2026_10_21_100100 (parts en %, 4 décimales) + 2026_10_21_200000 (périodicité facultative)
--    ATTENTION : n_plans_paiement doit être vide (l'ancien modèle avait filière / niveau / montant).
--                Les montants viennent de la grille tarifaire (n_grilles_tarifaires).
-- ----------------------------------------------------------------------------
ALTER TABLE n_plans_paiement DROP FOREIGN KEY n_plans_paiement_plp_filiere_id_foreign;
ALTER TABLE n_plans_paiement DROP FOREIGN KEY n_plans_paiement_plp_formation_id_foreign;
ALTER TABLE n_plans_paiement
    DROP INDEX plp_recherche,
    DROP COLUMN plp_filiere_id, DROP COLUMN plp_formation_id, DROP COLUMN plp_niveau, DROP COLUMN plp_mode, DROP COLUMN plp_montant_total,
    ADD COLUMN plp_diplome_id BIGINT UNSIGNED NOT NULL AFTER plp_as_id,
    ADD COLUMN plp_mode_id BIGINT UNSIGNED NOT NULL AFTER plp_diplome_id,
    ADD CONSTRAINT n_plans_paiement_plp_diplome_id_foreign FOREIGN KEY (plp_diplome_id) REFERENCES n_diplomes (dip_id),
    ADD CONSTRAINT n_plans_paiement_plp_mode_id_foreign FOREIGN KEY (plp_mode_id) REFERENCES n_modes_enseignement (mode_id),
    ADD INDEX plp_recherche (plp_as_id, plp_diplome_id, plp_mode_id);
ALTER TABLE n_plans_paiement MODIFY plp_typeperiode_id BIGINT UNSIGNED NULL;   -- périodicité facultative

ALTER TABLE n_plan_echeances DROP COLUMN ple_montant,
    ADD COLUMN ple_pourcentage DECIMAL(7,4) NOT NULL AFTER ple_date_echeance,
    ADD CONSTRAINT chk_ple_pourcentage CHECK (ple_pourcentage >= 0 AND ple_pourcentage <= 100);

COMMIT;

-- ----------------------------------------------------------------------------
-- 5. Donnée modifiée à la main (base locale, pour tester l'espace enseignant)
--    L'enseignant 1 (BENIICH ABDELGHANI) est rattaché au compte pedagogie@supmti.test (user_id 676).
--    Pour revenir en arrière : remettre 233.
-- ----------------------------------------------------------------------------
-- UPDATE n_enseignants SET prof_user_id = 676 WHERE prof_id = 1;
-- UPDATE n_enseignants SET prof_user_id = 233 WHERE prof_id = 1;   -- retour arrière

-- Non inclus : comptes de test (voir backend/COMPTES-DEV.md), données [TEST], et la migration
-- 2026_10_16_200000_etlb_numeros_scolarite_professionnel (modifiée mais non liée à ce travail).
