-- Darlink ERP v0.3 Foundation - Schéma de référence
-- Pour nouvelle installation. Ne pas importer sur une base contenant déjà des données sans sauvegarde.

CREATE TABLE IF NOT EXISTS types_clients (
    id INT AUTO_INCREMENT PRIMARY KEY,
    libelle VARCHAR(80) NOT NULL UNIQUE,
    actif TINYINT(1) DEFAULT 1,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP,
    date_modification DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS clients (
    id INT AUTO_INCREMENT PRIMARY KEY,
    type_client_id INT NULL,
    code_client VARCHAR(20) NOT NULL UNIQUE,
    raison_sociale VARCHAR(150) NOT NULL,
    contact VARCHAR(150),
    adresse TEXT,
    code_postal VARCHAR(20),
    ville VARCHAR(100),
    pays VARCHAR(100) DEFAULT 'Maroc',
    telephone VARCHAR(30),
    mobile VARCHAR(30),
    email VARCHAR(150),
    ice VARCHAR(30),
    identifiant_fiscal VARCHAR(30),
    registre_commerce VARCHAR(30),
    remise DECIMAL(5,2) DEFAULT 0.00,
    delai_paiement INT DEFAULT 0,
    plafond_credit DECIMAL(12,2) DEFAULT 0,
    observations TEXT,
    actif TINYINT(1) DEFAULT 1,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP,
    date_modification DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (type_client_id) REFERENCES types_clients(id)
);

CREATE TABLE IF NOT EXISTS clients_historique (
    id INT AUTO_INCREMENT PRIMARY KEY,
    client_id INT NOT NULL,
    action VARCHAR(80) NOT NULL,
    details TEXT,
    date_action DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (client_id) REFERENCES clients(id)
);

CREATE TABLE IF NOT EXISTS familles_articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    libelle VARCHAR(100) NOT NULL UNIQUE,
    actif TINYINT(1) DEFAULT 1,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP,
    date_modification DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS marques_articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    libelle VARCHAR(100) NOT NULL UNIQUE,
    actif TINYINT(1) DEFAULT 1,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP,
    date_modification DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    famille_id INT NULL,
    marque_id INT NULL,
    reference VARCHAR(50) NOT NULL UNIQUE,
    designation VARCHAR(255) NOT NULL,
    conditionnement VARCHAR(100),
    unite VARCHAR(30) DEFAULT 'unité',
    prix_achat_ht DECIMAL(12,2) DEFAULT 0,
    coefficient DECIMAL(8,3) DEFAULT 1,
    prix_vente_ht DECIMAL(12,2) DEFAULT 0,
    taux_tva DECIMAL(5,2) DEFAULT 20.00,
    prix_vente_ttc DECIMAL(12,2) DEFAULT 0,
    marge_dh DECIMAL(12,2) DEFAULT 0,
    marge_pourcentage DECIMAL(6,2) DEFAULT 0,
    stock_minimum DECIMAL(12,2) DEFAULT 0,
    actif TINYINT(1) DEFAULT 1,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP,
    date_modification DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (famille_id) REFERENCES familles_articles(id),
    FOREIGN KEY (marque_id) REFERENCES marques_articles(id)
);

-- Phoenix P3.2A.1 - Fournisseurs
CREATE TABLE IF NOT EXISTS fournisseurs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    code_fournisseur VARCHAR(20) NOT NULL UNIQUE,
    raison_sociale VARCHAR(150) NOT NULL,
    nom_commercial VARCHAR(150),
    contact VARCHAR(120),
    fonction VARCHAR(100),
    telephone VARCHAR(30),
    mobile VARCHAR(30),
    email VARCHAR(150),
    site_web VARCHAR(150),
    adresse TEXT,
    complement_adresse VARCHAR(150),
    code_postal VARCHAR(20),
    ville VARCHAR(100),
    pays VARCHAR(100) DEFAULT 'Maroc',
    siret VARCHAR(20),
    tva_intracom VARCHAR(30),
    conditions_reglement VARCHAR(100),
    delai_livraison INT NULL,
    observations TEXT,
    actif TINYINT(1) DEFAULT 1,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP,
    date_modification DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_fournisseurs_raison_sociale (raison_sociale),
    INDEX idx_fournisseurs_actif (actif)
);
