-- Création de la base de données
CREATE DATABASE IF NOT EXISTS saytoukaay;
USE saytoukaay;

-- Table des utilisateurs
CREATE TABLE utilisateurs (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    role ENUM('admin', 'vendeur', 'magasinier') DEFAULT 'vendeur',
    statut TINYINT DEFAULT 1,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Table des catégories
CREATE TABLE categories (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(100) NOT NULL,
    description TEXT,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Table des produits
CREATE TABLE produits (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(255) NOT NULL,
    description TEXT,
    prix_achat DECIMAL(10,2) NOT NULL,
    prix_vente DECIMAL(10,2) NOT NULL,
    quantite INT DEFAULT 0,
    seuil_alerte INT DEFAULT 5,
    code_barre VARCHAR(50) UNIQUE,
    categorie_id INT,
    fournisseur_id INT,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (categorie_id) REFERENCES categories(id)
);

-- Table des fournisseurs
CREATE TABLE fournisseurs (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(255) NOT NULL,
    contact VARCHAR(100),
    telephone VARCHAR(20),
    email VARCHAR(100),
    adresse TEXT,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Table des achats
CREATE TABLE achats (
    id INT PRIMARY KEY AUTO_INCREMENT,
    fournisseur_id INT,
    reference VARCHAR(50) UNIQUE NOT NULL,
    total DECIMAL(10,2) NOT NULL,
    statut ENUM('en_attente', 'recu', 'annule') DEFAULT 'en_attente',
    date_achat DATE NOT NULL,
    date_creation DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (fournisseur_id) REFERENCES fournisseurs(id)
);

-- Table des détails d'achat
CREATE TABLE achat_details (
    id INT PRIMARY KEY AUTO_INCREMENT,
    achat_id INT,
    produit_id INT,
    quantite INT NOT NULL,
    prix_achat DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (achat_id) REFERENCES achats(id),
    FOREIGN KEY (produit_id) REFERENCES produits(id)
);

-- Table des ventes
CREATE TABLE ventes (
    id INT PRIMARY KEY AUTO_INCREMENT,
    reference VARCHAR(50) UNIQUE NOT NULL,
    client_nom VARCHAR(255),
    total DECIMAL(10,2) NOT NULL,
    montant_paye DECIMAL(10,2) NOT NULL,
    type_paiement ENUM('especes', 'carte', 'cheque', 'virement') DEFAULT 'especes',
    statut ENUM('complete', 'partiel', 'annule') DEFAULT 'complete',
    utilisateur_id INT,
    date_vente DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs(id)
);

-- Table des détails de vente
CREATE TABLE vente_details (
    id INT PRIMARY KEY AUTO_INCREMENT,
    vente_id INT,
    produit_id INT,
    quantite INT NOT NULL,
    prix_vente DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (vente_id) REFERENCES ventes(id),
    FOREIGN KEY (produit_id) REFERENCES produits(id)
);

-- Table des mouvements de stock
CREATE TABLE mouvements_stock (
    id INT PRIMARY KEY AUTO_INCREMENT,
    produit_id INT,
    type ENUM('entree', 'sortie', 'ajustement'),
    quantite INT NOT NULL,
    motif VARCHAR(255),
    reference VARCHAR(100),
    date_mouvement DATETIME DEFAULT CURRENT_TIMESTAMP,
    utilisateur_id INT,
    FOREIGN KEY (produit_id) REFERENCES produits(id),
    FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs(id)
);

-- Insertion d'un utilisateur admin par défaut
INSERT INTO utilisateurs (nom, email, password, role) VALUES 
('Administrateur', 'admin@saytoukaay.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin');