-- =============================================================================
-- Script de réparation Flyway — UnionFlow (mode dev)
-- =============================================================================
-- Exécuter UNE SEULE FOIS sur la base PostgreSQL "unionflow" AVANT de
-- relancer le serveur.
--
-- Contexte :
--   Hibernate (mode "update") avait créé certaines tables avant que Flyway
--   ne prenne le relais. Résultat : la table types_reference existe mais
--   manque la colonne "valeur_systeme" qu'attend V3.0.
--   flyway_schema_history s'arrête à la version 2.10.
--
-- Solution :
--   1. Ajouter les colonnes manquantes (ajoutées par V3.x mais absentes
--      car Hibernate avait créé les tables avant).
--   2. Marquer V3.0 → V3.6 comme "déjà appliquées" (success=true) dans
--      flyway_schema_history, afin que Flyway ne les reexécute pas.
--   3. Flyway n'exécutera alors que V3.7 (seed des membres de test).
-- =============================================================================

BEGIN;

-- ─────────────────────────────────────────────────────────────────────────────
-- 1. Ajouter les colonnes manquantes dues au mode Hibernate "update"
-- ─────────────────────────────────────────────────────────────────────────────

-- V3.0 a besoin de cette colonne dans types_reference
ALTER TABLE types_reference
    ADD COLUMN IF NOT EXISTS valeur_systeme BOOLEAN NOT NULL DEFAULT FALSE;

-- V3.5 peut avoir ajouté des colonnes d'adresse dans organisations
-- (ajout sécurisé — sans erreur si déjà présentes)
ALTER TABLE organisations ADD COLUMN IF NOT EXISTS adresse        VARCHAR(255);
ALTER TABLE organisations ADD COLUMN IF NOT EXISTS ville          VARCHAR(100);
ALTER TABLE organisations ADD COLUMN IF NOT EXISTS code_postal    VARCHAR(20);
ALTER TABLE organisations ADD COLUMN IF NOT EXISTS pays           VARCHAR(100);
ALTER TABLE organisations ADD COLUMN IF NOT EXISTS region         VARCHAR(100);

-- ─────────────────────────────────────────────────────────────────────────────
-- 2. Marquer V3.0 à V3.6 comme appliquées dans flyway_schema_history
-- ─────────────────────────────────────────────────────────────────────────────

DO $$
DECLARE
    max_rank INT;
BEGIN
    SELECT COALESCE(MAX(installed_rank), 0) INTO max_rank FROM flyway_schema_history;

    INSERT INTO flyway_schema_history
        (installed_rank, version, description, type, script, checksum,
         installed_by, installed_on, execution_time, success)
    VALUES
        (max_rank + 1, '3.0', 'Optimisation Structure Donnees',  'SQL',
         'V3.0__Optimisation_Structure_Donnees.sql',  0, current_user, NOW(), 0, true),

        (max_rank + 2, '3.1', 'Add Module Disponible FK',        'SQL',
         'V3.1__Add_Module_Disponible_FK.sql',         0, current_user, NOW(), 0, true),

        (max_rank + 3, '3.2', 'Seed Types Reference',            'SQL',
         'V3.2__Seed_Types_Reference.sql',             0, current_user, NOW(), 0, true),

        (max_rank + 4, '3.3', 'Optimisation Index Performance',  'SQL',
         'V3.3__Optimisation_Index_Performance.sql',   0, current_user, NOW(), 0, true),

        (max_rank + 5, '3.4', 'LCB FT Anti Blanchiment',         'SQL',
         'V3.4__LCB_FT_Anti_Blanchiment.sql',          0, current_user, NOW(), 0, true),

        (max_rank + 6, '3.5', 'Add Organisation Address Fields', 'SQL',
         'V3.5__Add_Organisation_Address_Fields.sql',  0, current_user, NOW(), 0, true),

        (max_rank + 7, '3.6', 'Create Test Organisations',       'SQL',
         'V3.6__Create_Test_Organisations.sql',        0, current_user, NOW(), 0, true)

    ON CONFLICT (version) DO NOTHING;
END $$;

COMMIT;

-- ─────────────────────────────────────────────────────────────────────────────
-- 3. Vérification finale
-- ─────────────────────────────────────────────────────────────────────────────

SELECT version, description, success, installed_on
FROM flyway_schema_history
ORDER BY installed_rank;
-- Vous devriez voir : ..., 2.10, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6
-- V3.7 sera appliquée par Flyway au prochain démarrage du serveur.
