-- ============================================
-- DarTech Cloud - Schéma de base de données
-- ============================================

CREATE DATABASE IF NOT EXISTS dartech_cloud CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE dartech_cloud;

-- ============================================
-- Table: forfaits (plans/tiers) — facturation ANNUELLE
-- ============================================
CREATE TABLE forfaits (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(50) NOT NULL,              -- Mini, Starter, Business, Pro, Enterprise
    quota_mo INT NOT NULL,                 -- quota en Mo (plus de granularité que Go)
    prix_dh_an DECIMAL(10,2) NOT NULL,     -- prix pour 12 mois
    actif TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Paliers réajustés : on démarre à 100 Mo (entrée de gamme accessible),
-- prix annuel = environ 10x le mensuel précédent (1-2 mois "offerts" pour inciter à l'annuel)
INSERT INTO forfaits (nom, quota_mo, prix_dh_an) VALUES
('Mini', 100, 300.00),              -- 100 Mo / an — documents essentiels
('Starter', 102400, 800.00),        -- 100 Go / an
('Business', 256000, 1600.00),      -- 250 Go / an
('Pro', 512000, 2500.00),           -- 500 Go / an
('Enterprise', 1024000, 4000.00);   -- 1 To / an

-- ============================================
-- Table: clients
-- ============================================
CREATE TABLE clients (
    id INT AUTO_INCREMENT PRIMARY KEY,
    client_uid VARCHAR(20) UNIQUE NOT NULL,    -- ex: client_0001 (utilisé pour le dossier Wasabi)
    nom_complet VARCHAR(150) NOT NULL,
    email VARCHAR(150) UNIQUE NOT NULL,
    telephone VARCHAR(30),
    password_hash VARCHAR(255) NOT NULL,
    forfait_id INT NOT NULL,
    wasabi_prefix VARCHAR(100) NOT NULL,       -- ex: clients/client_0001/
    statut ENUM('en_attente_paiement', 'actif', 'suspendu', 'desactive') DEFAULT 'en_attente_paiement',
    espace_utilise_mo BIGINT DEFAULT 0,        -- mis à jour périodiquement
    date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    date_echeance DATE,                        -- prochaine date de renouvellement (annuel: +365 jours)
    FOREIGN KEY (forfait_id) REFERENCES forfaits(id)
);

-- ============================================
-- Table: paiements
-- ============================================
CREATE TABLE paiements (
    id INT AUTO_INCREMENT PRIMARY KEY,
    client_id INT NOT NULL,
    reference_virement VARCHAR(50) NOT NULL,   -- ex: DT-CLIENT0001-2026
    montant_dh DECIMAL(10,2) NOT NULL,
    annee_couverte VARCHAR(4) NOT NULL,         -- ex: 2026
    preuve_fichier VARCHAR(255),                -- chemin vers la preuve uploadée (photo/PDF)
    statut ENUM('en_attente', 'valide', 'rejete') DEFAULT 'en_attente',
    date_soumission TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    date_validation TIMESTAMP NULL,
    valide_par VARCHAR(100),                    -- admin qui a validé
    notes TEXT,
    FOREIGN KEY (client_id) REFERENCES clients(id)
);

-- ============================================
-- Table: sessions_client (pour le login portail)
-- ============================================
CREATE TABLE sessions_client (
    id INT AUTO_INCREMENT PRIMARY KEY,
    client_id INT NOT NULL,
    token VARCHAR(255) UNIQUE NOT NULL,
    expires_at TIMESTAMP NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (client_id) REFERENCES clients(id)
);

-- ============================================
-- Table: admins (toi + futurs employés)
-- ============================================
CREATE TABLE admins (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(100) NOT NULL,
    email VARCHAR(150) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- ============================================
-- Table: log_activite (traçabilité simple)
-- ============================================
CREATE TABLE log_activite (
    id INT AUTO_INCREMENT PRIMARY KEY,
    client_id INT,
    action VARCHAR(50) NOT NULL,    -- upload, download, login, paiement_soumis...
    details TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (client_id) REFERENCES clients(id)
);

-- ============================================
-- Index utiles pour les performances
-- ============================================
CREATE INDEX idx_clients_statut ON clients(statut);
CREATE INDEX idx_paiements_statut ON paiements(statut);
CREATE INDEX idx_paiements_client ON paiements(client_id);
CREATE INDEX idx_sessions_token ON sessions_client(token);
