-- ============================================================
-- Money+Xfer — Portail Partenaire : schéma SQL
-- À exécuter sur la même base que akuxfer (DB partagée)
-- OU sur une base séparée avec les tables partagées en vue
-- ============================================================

-- Table des partenaires
CREATE TABLE IF NOT EXISTS partners (
    id           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name         VARCHAR(120) NOT NULL,
    email        VARCHAR(120) NOT NULL UNIQUE,
    password     VARCHAR(255) NOT NULL,
    phone        VARCHAR(30),
    company      VARCHAR(150),
    country      VARCHAR(80) DEFAULT 'République du Congo',
    logo         VARCHAR(255),
    is_active    TINYINT(1) DEFAULT 1,
    last_login   DATETIME,
    created_at   DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at   DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Table de liaison transaction ↔ partenaire
-- Quand Money+Xfer crée une transaction, il l'assigne à un partenaire
CREATE TABLE IF NOT EXISTS partner_transactions (
    id               INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    partner_id       INT UNSIGNED NOT NULL,
    -- référence de la transaction côté Money+Xfer principal
    reference        VARCHAR(60) NOT NULL,
    beneficiary_name VARCHAR(120) NOT NULL,
    beneficiary_bank VARCHAR(120),
    beneficiary_iban VARCHAR(50),
    beneficiary_phone VARCHAR(30),
    amount_sent      DECIMAL(15,2) NOT NULL,
    currency_from    VARCHAR(10) NOT NULL DEFAULT 'XAF',
    amount_received  DECIMAL(15,2) NOT NULL,
    currency_to      VARCHAR(10) NOT NULL,
    exchange_rate    DECIMAL(12,6) DEFAULT 1,
    fee_amount       DECIMAL(15,2) DEFAULT 0,
    region           VARCHAR(60),
    destination      VARCHAR(120),
    payment_method   VARCHAR(40) DEFAULT 'virement',
    notes            TEXT,
    -- statut côté partenaire
    status           ENUM('en_attente','en_cours','valide','paye','rejete','echoue') DEFAULT 'en_attente',
    due_date         DATE,           -- délai de paiement accordé
    validated_at     DATETIME,       -- date validation partenaire
    paid_at          DATETIME,       -- date marqué payé
    rejected_reason  TEXT,
    -- preuve de paiement uploadée par le partenaire
    proof_file       VARCHAR(255),   -- nom du fichier
    proof_type       VARCHAR(20),    -- 'image' ou 'pdf'
    -- facture jointe envoyée par Money+Xfer
    invoice_file     VARCHAR(255),
    created_at       DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at       DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (partner_id) REFERENCES partners(id) ON DELETE CASCADE,
    INDEX idx_partner (partner_id),
    INDEX idx_status  (status),
    INDEX idx_ref     (reference)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Notifications pour Money+Xfer principal (quand partenaire valide/paie)
CREATE TABLE IF NOT EXISTS partner_notifications (
    id               INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    partner_txn_id   INT UNSIGNED NOT NULL,
    type             ENUM('validation','paiement','rejet','relance') NOT NULL,
    message          TEXT,
    proof_file       VARCHAR(255),
    is_read          TINYINT(1) DEFAULT 0,
    created_at       DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (partner_txn_id) REFERENCES partner_transactions(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Journal d'audit partenaire
CREATE TABLE IF NOT EXISTS partner_audit_logs (
    id           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    partner_id   INT UNSIGNED,
    action       VARCHAR(80),
    txn_id       INT UNSIGNED,
    detail       TEXT,
    ip           VARCHAR(45),
    created_at   DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Données de démonstration
INSERT IGNORE INTO partners (name, email, password, phone, company, country) VALUES
('Jean-Paul Moukoko', 'partenaire@moneyxfer.com',
 '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', -- password: password
 '+242 06 123 4567', 'Moukoko Finance SARL', 'République du Congo');
