-- ============================================================
-- V2.4 — Cotisations : ajout organisation_id + parametres
-- Une cotisation est toujours liée à un membre ET à une organisation
-- Auteur: UnionFlow Team | BCEAO/OHADA compliant
-- ============================================================

-- Ajouter organisation_id sur cotisations
ALTER TABLE cotisations
    ADD COLUMN IF NOT EXISTS organisation_id UUID;

ALTER TABLE cotisations
    ADD CONSTRAINT fk_cotisation_organisation
    FOREIGN KEY (organisation_id) REFERENCES organisations(id) ON DELETE CASCADE;

CREATE INDEX IF NOT EXISTS idx_cotisation_organisation ON cotisations(organisation_id);

-- Mettre à jour les types de cotisation
ALTER TABLE cotisations DROP CONSTRAINT IF EXISTS chk_cotisation_type;
ALTER TABLE cotisations
    ADD CONSTRAINT chk_cotisation_type CHECK (type_cotisation IN (
        'ANNUELLE','MENSUELLE','EVENEMENTIELLE','SOLIDARITE','EXCEPTIONNELLE','AUTRE'
    ));

-- ============================================================
-- Paramètres de cotisation par organisation (montants fixés par l'org)
-- ============================================================
CREATE TABLE IF NOT EXISTS parametres_cotisation_organisation (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),

    organisation_id                  UUID UNIQUE NOT NULL,
    montant_cotisation_mensuelle     DECIMAL(12,2) DEFAULT 0 CHECK (montant_cotisation_mensuelle >= 0),
    montant_cotisation_annuelle      DECIMAL(12,2) DEFAULT 0 CHECK (montant_cotisation_annuelle >= 0),
    devise                           VARCHAR(3) NOT NULL DEFAULT 'XOF',
    date_debut_calcul_ajour          DATE,        -- configurable: depuis quand calculer les impayés
    delai_retard_avant_inactif_jours INTEGER NOT NULL DEFAULT 30,
    cotisation_obligatoire           BOOLEAN NOT NULL DEFAULT TRUE,

    -- Métadonnées BaseEntity
    actif              BOOLEAN NOT NULL DEFAULT TRUE,
    date_creation      TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    date_modification  TIMESTAMP,
    cree_par           VARCHAR(255),
    modifie_par        VARCHAR(255),
    version            BIGINT NOT NULL DEFAULT 0,

    CONSTRAINT fk_param_cotisation_org FOREIGN KEY (organisation_id) REFERENCES organisations(id) ON DELETE CASCADE
);

COMMENT ON TABLE parametres_cotisation_organisation IS 'Paramètres de cotisation configurés par le manager de chaque organisation';
COMMENT ON COLUMN parametres_cotisation_organisation.date_debut_calcul_ajour IS 'Date de référence pour le calcul membre «à jour». Configurable par le manager.';
COMMENT ON COLUMN parametres_cotisation_organisation.delai_retard_avant_inactif_jours IS 'Jours de retard après lesquels un membre passe INACTIF automatiquement';
