-- ============================================================================
-- V30 — Alignement membres_roles avec l'entité Java MembreRole
--
-- Contexte : Hibernate update mode a pu créer membres_roles avant V1 (depuis
-- l'entité Java), OU V1 l'a créé avec membre_id. Les deux cas sont gérés.
-- Toutes les opérations sont défensives (IF EXISTS / DO blocks).
-- ============================================================================

-- 1. Rendre membre_id nullable si la colonne existe encore (cas V1-first)
DO $$
BEGIN
    IF EXISTS (
        SELECT 1 FROM information_schema.columns
        WHERE table_name = 'membres_roles' AND column_name = 'membre_id'
    ) THEN
        ALTER TABLE membres_roles ALTER COLUMN membre_id DROP NOT NULL;
    END IF;
END $$;

-- 2. Ajouter membre_organisation_id si absente
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS membre_organisation_id UUID
    REFERENCES membres_organisations(id) ON DELETE CASCADE;

-- 3. Ajouter organisation_id si absente
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS organisation_id UUID
    REFERENCES organisations(id) ON DELETE CASCADE;

-- 4. Ajouter date_debut / date_fin / commentaire si absents
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS date_debut DATE;
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS date_fin DATE;
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS commentaire VARCHAR(500);

-- 5. Ajouter les colonnes BaseEntity manquantes
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS date_modification TIMESTAMP;
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 0;
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);

-- 6. Supprimer l'ancienne contrainte unique V1 (membre_id, role_id) si présente
DO $$
BEGIN
    IF EXISTS (
        SELECT 1 FROM pg_constraint
        WHERE conname = 'uk_membre_role' AND conrelid = 'membres_roles'::regclass
    ) THEN
        ALTER TABLE membres_roles DROP CONSTRAINT uk_membre_role;
    END IF;
END $$;

-- 7. Ajouter la contrainte unique (membre_organisation_id, role_id) si absente
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_constraint
        WHERE conname = 'uk_mr_membre_org_role' AND conrelid = 'membres_roles'::regclass
    ) THEN
        ALTER TABLE membres_roles
            ADD CONSTRAINT uk_mr_membre_org_role
            UNIQUE (membre_organisation_id, role_id);
    END IF;
END $$;

-- 8. Index de performance (IF NOT EXISTS — idempotent)
CREATE INDEX IF NOT EXISTS idx_mr_membre_org   ON membres_roles (membre_organisation_id);
CREATE INDEX IF NOT EXISTS idx_mr_organisation ON membres_roles (organisation_id);
CREATE INDEX IF NOT EXISTS idx_mr_role         ON membres_roles (role_id);
CREATE INDEX IF NOT EXISTS idx_mr_actif        ON membres_roles (actif);
