-- ============================================================
-- V2.8 — Rôles par organisation : membres_roles enrichi
-- Un membre peut avoir des rôles différents selon l'organisation
-- Auteur: UnionFlow Team | BCEAO/OHADA compliant
-- ============================================================

-- membres_roles doit référencer membres_organisations (pas uniquement membres)
-- On ajoute organisation_id et membre_organisation_id pour permettre les rôles multi-org

ALTER TABLE membres_roles
    ADD COLUMN IF NOT EXISTS membre_organisation_id UUID,
    ADD COLUMN IF NOT EXISTS organisation_id         UUID;

-- Mettre à jour la FK et la contrainte UNIQUE
ALTER TABLE membres_roles
    DROP CONSTRAINT IF EXISTS uk_membre_role;

ALTER TABLE membres_roles
    ADD CONSTRAINT fk_mr_membre_org    FOREIGN KEY (membre_organisation_id) REFERENCES membres_organisations(id) ON DELETE CASCADE,
    ADD CONSTRAINT fk_mr_organisation  FOREIGN KEY (organisation_id)         REFERENCES organisations(id) ON DELETE CASCADE;

-- Nouvelle contrainte: un utilisateur ne peut avoir le même rôle qu'une fois par organisation
ALTER TABLE membres_roles
    ADD CONSTRAINT uk_mr_membre_org_role
    UNIQUE (membre_organisation_id, role_id);

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);

COMMENT ON COLUMN membres_roles.membre_organisation_id IS 'Lien vers le membership de l''utilisateur dans l''organisation — détermine le contexte du rôle';
COMMENT ON COLUMN membres_roles.organisation_id IS 'Organisation dans laquelle ce rôle est actif — dénormalisé pour les requêtes de performance';
