-- ============================================================
-- V2.1 — Hiérarchie organisations + corrections
-- Auteur: UnionFlow Team | BCEAO/OHADA compliant
-- ============================================================

-- Ajouter la FK propre pour la hiérarchie (remplace le UUID nu)
ALTER TABLE organisations
    DROP CONSTRAINT IF EXISTS fk_organisation_parente;

ALTER TABLE organisations
    ADD CONSTRAINT fk_organisation_parente
    FOREIGN KEY (organisation_parente_id) REFERENCES organisations(id) ON DELETE SET NULL;

-- Nouveaux champs hiérarchie et modules
ALTER TABLE organisations
    ADD COLUMN IF NOT EXISTS est_organisation_racine BOOLEAN NOT NULL DEFAULT TRUE,
    ADD COLUMN IF NOT EXISTS chemin_hierarchique     VARCHAR(2000),
    ADD COLUMN IF NOT EXISTS type_organisation_code  VARCHAR(50);

-- Élargir la contrainte de type_organisation pour couvrir tous les métiers
ALTER TABLE organisations DROP CONSTRAINT IF EXISTS chk_organisation_type;
ALTER TABLE organisations
    ADD CONSTRAINT chk_organisation_type CHECK (type_organisation IN (
        'ASSOCIATION','MUTUELLE_EPARGNE_CREDIT','MUTUELLE_SANTE',
        'TONTINE','ONG','COOPERATIVE_AGRICOLE','ASSOCIATION_PROFESSIONNELLE',
        'ASSOCIATION_COMMUNAUTAIRE','ORGANISATION_RELIGIEUSE',
        'FEDERATION','SYNDICAT','LIONS_CLUB','ROTARY_CLUB','AUTRE'
    ));

-- Règle : organisation sans parent = racine
UPDATE organisations
    SET est_organisation_racine = TRUE
    WHERE organisation_parente_id IS NULL;

UPDATE organisations
    SET est_organisation_racine = FALSE
    WHERE organisation_parente_id IS NOT NULL;

-- Index pour les requêtes hiérarchiques
CREATE INDEX IF NOT EXISTS idx_org_racine    ON organisations(est_organisation_racine);
CREATE INDEX IF NOT EXISTS idx_org_chemin    ON organisations(chemin_hierarchique);

COMMENT ON COLUMN organisations.est_organisation_racine IS 'TRUE si c''est l''organisation mère (souscrit au forfait pour toute la hiérarchie)';
COMMENT ON COLUMN organisations.chemin_hierarchique IS 'Chemin UUID ex: /uuid-racine/uuid-inter/uuid-feuille — requêtes récursives optimisées';
