-- Base de données pour le catalogue Maymana
-- Date: 2026-04-07

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

-- Table des familles de matériel
CREATE TABLE IF NOT EXISTS familles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(100) NOT NULL,
    description TEXT,
    ordre INT DEFAULT 0,
    actif TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_actif (actif),
    INDEX idx_ordre (ordre)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Table des sous-familles
CREATE TABLE IF NOT EXISTS sous_familles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    famille_id INT NOT NULL,
    nom VARCHAR(100) NOT NULL,
    description TEXT,
    ordre INT DEFAULT 0,
    actif TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (famille_id) REFERENCES familles(id) ON DELETE CASCADE,
    INDEX idx_famille (famille_id),
    INDEX idx_actif (actif),
    INDEX idx_ordre (ordre)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Table du matériel
CREATE TABLE IF NOT EXISTS materiel (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_hfsql VARCHAR(50) NULL COMMENT 'ID de référence HFSQL',
    libelle VARCHAR(255) NOT NULL,
    description TEXT,
    famille_id INT NOT NULL,
    sous_famille_id INT NULL,
    photo VARCHAR(255) NULL,
    qte_stock INT DEFAULT 0,
    prix_unitaire DECIMAL(10,2) NULL,
    actif TINYINT(1) DEFAULT 1,
    featured TINYINT(1) DEFAULT 0 COMMENT 'Mis en avant sur la page d accueil',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (famille_id) REFERENCES familles(id) ON DELETE RESTRICT,
    FOREIGN KEY (sous_famille_id) REFERENCES sous_familles(id) ON DELETE SET NULL,
    INDEX idx_famille (famille_id),
    INDEX idx_sous_famille (sous_famille_id),
    INDEX idx_actif (actif),
    INDEX idx_featured (featured),
    INDEX idx_hfsql (id_hfsql),
    FULLTEXT idx_search (libelle, description)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Table des utilisateurs admin
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL,
    nom VARCHAR(100) NOT NULL,
    prenom VARCHAR(100) NOT NULL,
    role ENUM('admin', 'commercial') DEFAULT 'commercial',
    actif TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_username (username),
    INDEX idx_actif (actif)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Table de logs de synchronisation
CREATE TABLE IF NOT EXISTS sync_logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    type ENUM('auto', 'manual', 'import') NOT NULL,
    status ENUM('success', 'error', 'partial') NOT NULL,
    items_synced INT DEFAULT 0,
    errors INT DEFAULT 0,
    message TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_type (type),
    INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insertion de données de test
INSERT INTO familles (nom, description, ordre) VALUES 
('Vaisselle', 'Assiettes, couverts, verres', 1),
('Mobilier', 'Tables, chaises, décoration', 2),
('Linge', 'Nappes, serviettes, chemins de table', 3),
('Buffet', 'Chafing dish, plateaux, présentoirs', 4),
('Décoration', 'Centres de table, bougies, vases', 5);

INSERT INTO sous_familles (famille_id, nom, ordre) VALUES 
(1, 'Assiettes', 1),
(1, 'Couverts', 2),
(1, 'Verres', 3),
(2, 'Tables', 1),
(2, 'Chaises', 2),
(3, 'Nappes', 1),
(3, 'Serviettes', 2);

-- Utilisateur admin par défaut (mot de passe: admin123)
INSERT INTO users (username, password, email, nom, prenom, role) VALUES 
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin@maymana.com', 'Admin', 'Maymana', 'admin');
