-- ============================================================================
-- V49 — Multi-devise + KYC non-résident (P2-NEW-7)
-- 2026-04-25
--
-- Ouvre UnionFlow à la diaspora UEMOA (France, USA, Canada, UK) avec :
--   • Table de taux de change quotidiens
--   • Champs membre/KYC pour non-résidents (passeport, fiscalité étrangère)
-- ============================================================================

-- ── Taux de change ──────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS taux_change (
    id                  UUID PRIMARY KEY,
    devise_source       VARCHAR(3) NOT NULL,
    devise_cible        VARCHAR(3) NOT NULL,
    taux                NUMERIC(18, 8) NOT NULL CHECK (taux > 0),
    date_validite       DATE NOT NULL,
    source              VARCHAR(50) NOT NULL DEFAULT 'BCEAO',
    -- BaseEntity
    date_creation       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    date_modification   TIMESTAMP,
    cree_par            VARCHAR(255),
    modifie_par         VARCHAR(255),
    version             BIGINT,
    actif               BOOLEAN NOT NULL DEFAULT TRUE,
    CONSTRAINT uq_taux_change_paire_date
        UNIQUE (devise_source, devise_cible, date_validite),
    CONSTRAINT chk_taux_change_devises_distinctes
        CHECK (devise_source <> devise_cible)
);

CREATE INDEX IF NOT EXISTS idx_taux_change_paire
    ON taux_change (devise_source, devise_cible);
CREATE INDEX IF NOT EXISTS idx_taux_change_date_validite
    ON taux_change (date_validite DESC);

COMMENT ON TABLE taux_change IS
    'Taux de change quotidiens — source BCEAO/ECB/Fixer.io selon devise. Multi-devise diaspora.';
COMMENT ON COLUMN taux_change.taux IS
    'Taux multiplicatif : 1 unité de devise_source = taux unités de devise_cible';

-- Seed minimal (parité fixe XOF<->EUR + taux indicatifs au 2026-04-25)
INSERT INTO taux_change (id, devise_source, devise_cible, taux, date_validite, source, actif)
VALUES
    (gen_random_uuid(), 'EUR', 'XOF', 655.957, '2026-04-25', 'BCEAO_FIXED', TRUE),
    (gen_random_uuid(), 'XOF', 'EUR', 0.00152449, '2026-04-25', 'BCEAO_FIXED', TRUE),
    (gen_random_uuid(), 'USD', 'XOF', 605.00, '2026-04-25', 'BCEAO', TRUE),
    (gen_random_uuid(), 'XOF', 'USD', 0.00165289, '2026-04-25', 'BCEAO', TRUE),
    (gen_random_uuid(), 'GBP', 'XOF', 765.00, '2026-04-25', 'BCEAO', TRUE),
    (gen_random_uuid(), 'CAD', 'XOF', 440.00, '2026-04-25', 'BCEAO', TRUE)
ON CONFLICT (devise_source, devise_cible, date_validite) DO NOTHING;

-- ── Extension Membre (diaspora) ─────────────────────────────────────────────
ALTER TABLE utilisateurs
    ADD COLUMN IF NOT EXISTS pays_residence       VARCHAR(3),
    ADD COLUMN IF NOT EXISTS numero_passeport     VARCHAR(50),
    ADD COLUMN IF NOT EXISTS numero_fiscal_etranger VARCHAR(50),
    ADD COLUMN IF NOT EXISTS est_diaspora         BOOLEAN NOT NULL DEFAULT FALSE,
    ADD COLUMN IF NOT EXISTS devise_preferee      VARCHAR(3) NOT NULL DEFAULT 'XOF';

CREATE INDEX IF NOT EXISTS idx_membre_diaspora
    ON utilisateurs (est_diaspora) WHERE est_diaspora = TRUE;

COMMENT ON COLUMN utilisateurs.pays_residence IS
    'ISO-3 (FRA, USA, CAN, GBR...). NULL = résident UEMOA. Différent de nationalite.';
COMMENT ON COLUMN utilisateurs.numero_passeport IS
    'Passeport pour non-résidents (CNI insuffisante). Vérification ARTCI.';
COMMENT ON COLUMN utilisateurs.numero_fiscal_etranger IS
    'NIF/SSN/SIN — pour reporting fiscal accord bilatéral CI-pays résidence.';

-- ── Extension KycDossier (non-résident) ─────────────────────────────────────
ALTER TABLE kyc_dossier
    ADD COLUMN IF NOT EXISTS pays_origine_fonds   VARCHAR(3),
    ADD COLUMN IF NOT EXISTS justificatif_residence_etrangere VARCHAR(500),
    ADD COLUMN IF NOT EXISTS niveau_due_diligence VARCHAR(20) NOT NULL DEFAULT 'STANDARD'
        CHECK (niveau_due_diligence IN ('SIMPLIFIE', 'STANDARD', 'RENFORCE'));

CREATE INDEX IF NOT EXISTS idx_kyc_due_diligence
    ON kyc_dossier (niveau_due_diligence)
    WHERE niveau_due_diligence = 'RENFORCE';

COMMENT ON COLUMN kyc_dossier.niveau_due_diligence IS
    'Instr. BCEAO 001-03-2025 : RENFORCE pour non-résidents, PEP, et risque pays grey-list FATF';
COMMENT ON COLUMN kyc_dossier.pays_origine_fonds IS
    'ISO-3 — origine des fonds pour transferts internationaux (anti-blanchiment).';
