-- Migration 0057 : Réinitialisation table TVA + insertion taux par année (réforme LF 2024-2026)
-- 1) Sauvegarde des comptes existants dans une table temporaire
-- 2) Vidage + réinsertion propre
-- 3) Remise des comptes sauvegardés sur les taux correspondants
-- Source : DGI Maroc, Note Circulaire N°735 (LF 2024), N°736 (LF 2025)
--
-- ┌──────────────────────────┬────────┬──────┬──────┬──────┐
-- │ Produit/Service          │ Ancien │ 2024 │ 2025 │ 2026 │
-- ├──────────────────────────┼────────┼──────┼──────┼──────┤
-- │ Électricité              │ 14%    │ 16%  │ 18%  │ 20%  │
-- │ Location compteurs       │  7%    │ 11%  │ 15%  │ 20%  │
-- │ Transport aérien/marit.  │ 14%    │ 16%  │ 18%  │ 20%  │
-- │ Transport urbain/routier │ 14%    │ 13%  │ 12%  │ 10%  │
-- │ Sucre raffiné            │  7%    │  8%  │  9%  │ 10%  │
-- │ Énergies renouvelables   │ 14%    │ 12%  │ 10%  │ 10%  │
-- │ Courtage assurance       │ 14%    │ 12%  │ 10%  │ 10%  │
-- │ Eau non domestique       │  7%    │ 10%  │ 10%  │ 10%  │
-- │ Véhicules économiques    │  7%    │ 10%  │ 10%  │ 10%  │
-- └──────────────────────────┴────────┴──────┴──────┴──────┘

IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tva' AND COLUMN_NAME = 'Annee')
BEGIN

    -- ========================================================
    -- Étape 1 : Sauvegarder les comptes existants (un seul jeu par taux)
    -- ========================================================
    EXEC('
        IF OBJECT_ID(''tempdb..#tva_comptes'') IS NOT NULL DROP TABLE #tva_comptes;

        SELECT tva, compte_recup, comte_facture, compte_immo
        INTO #tva_comptes
        FROM (
            SELECT tva, compte_recup, comte_facture, compte_immo,
                   ROW_NUMBER() OVER (PARTITION BY tva ORDER BY Annee) AS rn
            FROM tva
            WHERE compte_recup != '''' OR comte_facture != '''' OR compte_immo != ''''
        ) t
        WHERE rn = 1;

        -- ========================================================
        -- Étape 2 : Vider la table
        -- ========================================================
        DELETE FROM tva;

        -- ========================================================
        -- Étape 3 : Réinsertion — Annee 0 (taux historiques)
        -- ========================================================
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (0,  0, '''', '''', '''', 0);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (7,  0, '''', '''', '''', 0);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (10, 0, '''', '''', '''', 0);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (14, 0, '''', '''', '''', 0);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (20, 1, '''', '''', '''', 0);

        -- Annee 2024
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (0,  0, '''', '''', '''', 2024);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (8,  0, '''', '''', '''', 2024);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (10, 0, '''', '''', '''', 2024);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (11, 0, '''', '''', '''', 2024);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (12, 0, '''', '''', '''', 2024);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (13, 0, '''', '''', '''', 2024);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (16, 0, '''', '''', '''', 2024);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (20, 1, '''', '''', '''', 2024);

        -- Annee 2025
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (0,  0, '''', '''', '''', 2025);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (9,  0, '''', '''', '''', 2025);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (10, 0, '''', '''', '''', 2025);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (12, 0, '''', '''', '''', 2025);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (15, 0, '''', '''', '''', 2025);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (18, 0, '''', '''', '''', 2025);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (20, 1, '''', '''', '''', 2025);

        -- Annee 2026 (fin de reforme)
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (0,  0, '''', '''', '''', 2026);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (10, 0, '''', '''', '''', 2026);
        INSERT INTO tva (tva, par_defaut, compte_recup, comte_facture, compte_immo, Annee) VALUES (20, 1, '''', '''', '''', 2026);

        -- ========================================================
        -- Étape 4 : Remettre les comptes sauvegardés
        -- ========================================================
        UPDATE t
        SET t.compte_recup   = s.compte_recup,
            t.comte_facture  = s.comte_facture,
            t.compte_immo    = s.compte_immo
        FROM tva t
        INNER JOIN #tva_comptes s ON t.tva = s.tva;

        DROP TABLE #tva_comptes;
    ');

    PRINT 'Table tva reinitialisee avec comptes restaures';
END
ELSE
BEGIN
    PRINT 'Colonne Annee absente - migration ignoree';
END
