-- =====================================================
-- FICHIER SQL COMPLET - TOUTES LES TABLES CUPIDOSE
-- Base de données: la league
-- Date de génération: 2026-01-12
-- =====================================================

-- =====================================================
-- 1. TABLE: cupidose_utilisateur
-- Description: Gestion des utilisateurs du système
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_utilisateur` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom_d'utilisateur` VARCHAR(255) NOT NULL UNIQUE,
    `Mot_de_passe_d'utilisateur` VARCHAR(255) NOT NULL,
    `Rôle_d'utilisateur` VARCHAR(50) NOT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Nom_d'utilisateur`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insertion de l'utilisateur administrateur principal
-- Nom: CupiDose | Mot de passe: 19849635 | Rôle: Entreprise (le plus puissant)
INSERT INTO `cupidose_utilisateur` (`Nom_d'utilisateur`, `Mot_de_passe_d'utilisateur`, `Rôle_d'utilisateur`, `created_at`) 
VALUES ('CupiDose', '$2y$10$YmF0Y2g0M2RhMTI0MjQyNe5aP.JHVDJ1Vz9YQ2hVMjU2MTk4NDk2MzU', 'Entreprise', NOW())
ON DUPLICATE KEY UPDATE `Mot_de_passe_d'utilisateur` = VALUES(`Mot_de_passe_d'utilisateur`), `Rôle_d'utilisateur` = VALUES(`Rôle_d'utilisateur`);

-- NOTE IMPORTANTE: Le mot de passe ci-dessus est hashé avec bcrypt (password_hash PHP)
-- Si vous devez réinitialiser le mot de passe '19849635', exécutez ce code PHP:
-- $hashed = password_hash('19849635', PASSWORD_DEFAULT);
-- Puis mettez à jour avec: UPDATE cupidose_utilisateur SET Mot_de_passe_d'utilisateur = '$hashed' WHERE Nom_d'utilisateur = 'CupiDose';


-- =====================================================
-- 2. TABLE: CupiDose_messages
-- Description: Messagerie interne avec chiffrement AES-256-CBC
-- =====================================================
CREATE TABLE IF NOT EXISTS `CupiDose_messages` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Identifiant_utilisateur_de_messages` INT NOT NULL,
    `Nom_utilisateur_de_messages` VARCHAR(255) NOT NULL,
    `Rôle_utilisateur_de_messages` VARCHAR(50) NOT NULL,
    `Contenu_de_messages` TEXT NOT NULL COMMENT 'Contenu chiffré AES-256-CBC',
    `Adresse_IP_de_messages` VARCHAR(45) NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `edited_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
    INDEX (`Identifiant_utilisateur_de_messages`),
    INDEX (`created_at`),
    FOREIGN KEY (`Identifiant_utilisateur_de_messages`) REFERENCES `cupidose_utilisateur`(`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 3. TABLE: message_logs (optionnelle)
-- Description: Logs des actions sur les messages
-- =====================================================
CREATE TABLE IF NOT EXISTS `message_logs` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `action` VARCHAR(50) NOT NULL,
    `user_id` INT NOT NULL,
    `message_id` INT NOT NULL,
    `ip_address` VARCHAR(45) NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`user_id`),
    INDEX (`message_id`),
    FOREIGN KEY (`user_id`) REFERENCES `cupidose_utilisateur`(`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 4. TABLE: cupidose_compte
-- Description: Gestion des comptes financiers
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_compte` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom_de_compte` VARCHAR(255) NOT NULL UNIQUE,
    `Montant_de_compte` DECIMAL(15,2) DEFAULT 0.00,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX (`Nom_de_compte`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 5. TABLE: cupidose_compte_historique_transfert
-- Description: Historique des transferts entre comptes
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_compte_historique_transfert` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Date_de_compte_historique_transfert` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `Compte_d'origine__de_compte_historique_transfert` VARCHAR(255) NOT NULL,
    `Compte_de_destination_de_compte_historique_transfert` VARCHAR(255) NOT NULL,
    `Montant_de_compte_historique_transfert` DECIMAL(15,2) NOT NULL,
    `Description_de_compte_historique_transfert` TEXT NULL,
    `Identifiant_utilisateur_de_compte_historique_transfert` INT NULL,
    `Type_d'opération_de_compte_historique_transfert` VARCHAR(50) NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Date_de_compte_historique_transfert`),
    INDEX (`Identifiant_utilisateur_de_compte_historique_transfert`),
    FOREIGN KEY (`Identifiant_utilisateur_de_compte_historique_transfert`) REFERENCES `cupidose_utilisateur`(`ID`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 6. TABLE: cupidose_salaire
-- Description: Gestion des salaires et missions
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_salaire` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Identifiant_utilisateur_de_salaire` INT NOT NULL,
    `Titre_de_mission_de_salaire` VARCHAR(255) NOT NULL,
    `Déplacement_de_mission_de_salaire` DECIMAL(10,2) DEFAULT 0,
    `Risque_de_mission_de_salaire` DECIMAL(10,2) DEFAULT 0,
    `Travail_nuit_de_mission_de_salaire` DECIMAL(10,2) DEFAULT 0,
    `Véhicule_de_mission_de_salaire` DECIMAL(10,2) DEFAULT 0,
    `Montant_total_de_mission_de_salaire` DECIMAL(10,2) NOT NULL,
    `Date_de_paiement_de_mission_de_salaire` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `Payé_par_utilisateur_de_paiement_de_mission_de_salaire` INT NOT NULL,
    INDEX (`Identifiant_utilisateur_de_salaire`),
    INDEX (`Date_de_paiement_de_mission_de_salaire`),
    FOREIGN KEY (`Identifiant_utilisateur_de_salaire`) REFERENCES `cupidose_utilisateur`(`ID`) ON DELETE CASCADE,
    FOREIGN KEY (`Payé_par_utilisateur_de_paiement_de_mission_de_salaire`) REFERENCES `cupidose_utilisateur`(`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 7. TABLE: cupidose_investissement
-- Description: Gestion des investissements
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_investissement` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Identifiant_utilisateur_de_investissement` INT NOT NULL,
    `Montant_de_investissement` DECIMAL(15,2) NOT NULL,
    `Date_de_investissement` DATE NOT NULL,
    `Remboursé_de_investissement` DECIMAL(15,2) NOT NULL DEFAULT 0,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Identifiant_utilisateur_de_investissement`),
    INDEX (`Date_de_investissement`),
    FOREIGN KEY (`Identifiant_utilisateur_de_investissement`) REFERENCES `cupidose_utilisateur`(`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 8. TABLE: cupidose_categories
-- Description: Hiérarchie Catégorie > Sous-catégorie > Type > Marque
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_categories` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom` VARCHAR(255) NOT NULL,
    `Parent_ID` INT NULL,
    `Niveau` INT DEFAULT 1,
    `Category_ID` INT NULL,
    `Subcategory_ID` INT NULL,
    `Type_ID` INT NULL,
    `Marque_ID` INT NULL,
    `Saveur_Parent_ID` INT NULL,
    `Usine_fabrication` VARCHAR(255) NULL,
    `Usine_ID` INT NULL,
    `Saveur` VARCHAR(255) NULL,
    `Saveur_ID` INT NULL,
    `Images` TEXT NULL,
    `Videos` TEXT NULL,
    `Created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Parent_ID`),
    INDEX (`Niveau`),
    INDEX (`Category_ID`),
    INDEX (`Type_ID`),
    FOREIGN KEY (`Parent_ID`) REFERENCES `cupidose_categories`(`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 9. TABLE: cupidose_categories_produit_finis
-- Description: Formats des produits finis
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_categories_produit_finis` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Format` VARCHAR(255) NOT NULL,
    `Created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 10. TABLE: cupidose_fournisseur
-- Description: Gestion des fournisseurs
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_fournisseur` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom` VARCHAR(255) NOT NULL,
    `Adresse` TEXT NULL,
    `Telephone` VARCHAR(50) NULL,
    `Email` VARCHAR(255) NULL,
    `Contact` VARCHAR(255) NULL,
    `Notes` TEXT NULL,
    `Canal_Telegram` VARCHAR(255) NULL,
    `Canal_Patato` VARCHAR(255) NULL,
    `Canal_Luffa` VARCHAR(255) NULL,
    `Canal_Whatsap` VARCHAR(255) NULL,
    `Canal_Snapchat` VARCHAR(255) NULL,
    `Canal_Instagram` VARCHAR(255) NULL,
    `Contact_Telegram` VARCHAR(255) NULL,
    `Contact_Snapchat` VARCHAR(255) NULL,
    `Contact_Signal` VARCHAR(255) NULL,
    `Contact_Luffa` VARCHAR(255) NULL,
    `Contact_Patato` VARCHAR(255) NULL,
    `Contact_Telephone` VARCHAR(255) NULL,
    `Contact_Whatsap` VARCHAR(255) NULL,
    `Fiabilite` INT NULL,
    `Historique` TEXT NULL,
    `Commentaire` TEXT NULL,
    `Categorie_produit` VARCHAR(255) NULL,
    `Ville` VARCHAR(255) NULL,
    `Secteur` VARCHAR(255) NULL,
    `Created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Nom`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 11. TABLE: cupidose_client
-- Description: Gestion des clients
-- =====================================================
CREATE TABLE IF NOT EXISTS `cupidose_client` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Prénom_de_client` VARCHAR(255) NULL,
    `Nom_de_client` VARCHAR(255) NULL,
    `Pseudonyme_signal_de_client` VARCHAR(255) NULL,
    `Surnom_de_client` VARCHAR(255) NULL,
    `Numéro_de_téléphone_de_client` VARCHAR(50) NULL,
    `Nom_de_la_ville_de_client` VARCHAR(255) NULL,
    `Adresse_exact_de_client` TEXT NULL,
    `Année_de_naissance_de_client` INT NULL,
    `Genre_de_client` VARCHAR(50) NULL,
    `Date_ajout_de_client` DATE NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Nom_de_client`),
    INDEX (`Pseudonyme_signal_de_client`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 12. TABLE: CupiDose_lieu (ou cupidose_lieu)
-- Description: Gestion des lieux et points GPS
-- =====================================================
CREATE TABLE IF NOT EXISTS `CupiDose_lieu` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom_de_la_ville_de_lieu` VARCHAR(255) NOT NULL,
    `Code_postal_de_lieu` VARCHAR(20) NULL,
    `Coordonnées_gps_de_lieu` VARCHAR(255) NULL,
    `Nom_du_pays_de_lieu` VARCHAR(255) NULL,
    `Nom_de_type_lieu` VARCHAR(255) NULL,
    `population` INT NULL,
    `langue` VARCHAR(255) NULL,
    `type_controle` VARCHAR(255) NULL,
    `Note_contrôle_fréquent_de_lieu` INT NULL,
    `Note_police_de_lieu` INT NULL,
    `Note_accès_de_la_route_de_lieu` INT NULL,
    `Note_sécurité_caméra_de_lieu` INT NULL,
    `Trafic_de_lieu` VARCHAR(255) NULL,
    `Heures_de_pointes_de_lieu` VARCHAR(255) NULL,
    `Flux_journalier_de_lieu` VARCHAR(255) NULL,
    `Flux_touristique_de_lieu` VARCHAR(255) NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Nom_de_la_ville_de_lieu`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 13. TABLE: CupiDose_matière_première_formulation
-- Description: Matières premières pour formulation
-- =====================================================
CREATE TABLE IF NOT EXISTS `CupiDose_matière_première_formulation` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom_de_matière_première_formulation` VARCHAR(255) NOT NULL,
    `Catégorie_de_matière_première_formulation` VARCHAR(255) NULL,
    `Sous-catégorie_de_matière_première_formulation` VARCHAR(255) NULL,
    `Type_de_matière_première_formulation` VARCHAR(255) NULL,
    `Marque_de_matière_première_formulation` VARCHAR(255) NULL,
    `Fournisseur_de_matière_première_formulation` VARCHAR(255) NULL,
    `Saveur_de_matière_première_formulation` VARCHAR(255) NULL,
    `Usine_de_matière_première_formulation` VARCHAR(255) NULL,
    `Référence_de_matière_première_formulation` VARCHAR(255) NOT NULL UNIQUE,
    `Prix_d'achat_total_de_matière_première_formulation` DECIMAL(15,2) NOT NULL,
    `Quantité_acheté_de_matière_première_formulation` DECIMAL(15,3) NOT NULL,
    `Prix_d'achat_unitaire_de_matière_première_formulation` DECIMAL(15,2) NOT NULL,
    `Quantité_actuel_de_matière_première_formulation` DECIMAL(15,3) NOT NULL,
    `Image_de_matière_première_formulation` LONGBLOB NULL,
    `Video_de_matière_première_formulation` TEXT NULL,
    `Heure_d'ajout_de_matière_première_formulation` TIME NULL,
    `Date_d'ajout_de_matière_première_formulation` DATE NULL,
    `Description_de_matière_première_formulation` TEXT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Référence_de_matière_première_formulation`),
    INDEX (`Nom_de_matière_première_formulation`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 14. TABLE: CupiDose_matière_première_achat-revente
-- Description: Matières premières pour achat-revente
-- =====================================================
CREATE TABLE IF NOT EXISTS `CupiDose_matière_première_achat-revente` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom_de_matière_première_achat-revente` VARCHAR(255) NOT NULL,
    `Catégorie_de_matière_première_achat-revente` VARCHAR(255) NULL,
    `Sous-catégorie_de_matière_première_achat-revente` VARCHAR(255) NULL,
    `Type_de_matière_première_achat-revente` VARCHAR(255) NULL,
    `Marque_de_matière_première_achat-revente` VARCHAR(255) NULL,
    `Fournisseur_de_matière_première_achat-revente` VARCHAR(255) NULL,
    `Saveur_de_matière_première_achat-revente` VARCHAR(255) NULL,
    `Usine_de_matière_première_achat-revente` VARCHAR(255) NULL,
    `Référence_de_matière_première_achat-revente` VARCHAR(255) NOT NULL UNIQUE,
    `Prix_d'achat_total_de_matière_première_achat-revente` DECIMAL(15,2) NOT NULL,
    `Quantité_acheté_de_matière_première_achat-revente` DECIMAL(15,3) NOT NULL,
    `Prix_d'achat_unitaire_de_matière_première_achat-revente` DECIMAL(15,2) NOT NULL,
    `Quantité_actuel_de_matière_première_achat-revente` DECIMAL(15,3) NOT NULL,
    `Image_de_matière_première_achat-revente` LONGBLOB NULL,
    `Video_de_matière_première_achat-revente` TEXT NULL,
    `Heure_d'ajout_de_matière_première_achat-revente` TIME NULL,
    `Date_d'ajout_de_matière_première_achat-revente` DATE NULL,
    `Description_de_matière_première_achat-revente` TEXT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Référence_de_matière_première_achat-revente`),
    INDEX (`Nom_de_matière_première_achat-revente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 15. TABLE: CupiDose_produit_finis_formulation
-- Description: Produits finis créés par formulation
-- =====================================================
CREATE TABLE IF NOT EXISTS `CupiDose_produit_finis_formulation` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom_de_produit_finis_formulation` VARCHAR(255) NOT NULL,
    `Catégorie_de_produit_finis_formulation` VARCHAR(255) NULL,
    `Format_de_produit_finis_formulation` VARCHAR(255) NULL,
    `Type_de_produit_finis_formulation` VARCHAR(255) NULL,
    `Référence_de_produit_finis_formulation` VARCHAR(255) NOT NULL UNIQUE,
    `Statut_de_produit_finis_formulation` VARCHAR(100) NULL DEFAULT 'Produit non-vendu',
    `Description_de_produit_finis_formulation` TEXT NULL,
    `Propriétaire_de_produit_finis_formulation` VARCHAR(255) NULL,
    `Image_de_produit_finis_formulation` LONGBLOB NULL,
    `Heure_d'ajout_de_produit_finis_formulation` TIME NULL,
    `Date_d'ajout_de_produit_finis_formulation` DATE NULL,
    `Coût_de_revient_total_de_produit_finis_formulation` DECIMAL(15,2) NULL,
    `Bénéfice_total_de_produit_finis_formulation` DECIMAL(15,2) NULL,
    `Prix_de_vente_total_de_produit_finis_formulation` DECIMAL(15,2) NULL,
    -- Matières premières utilisées (jusqu'à 5)
    `Nom_de_matière_première_formulation_1` VARCHAR(255) NULL,
    `Nom_de_matière_première_formulation_2` VARCHAR(255) NULL,
    `Nom_de_matière_première_formulation_3` VARCHAR(255) NULL,
    `Nom_de_matière_première_formulation_4` VARCHAR(255) NULL,
    `Nom_de_matière_première_formulation_5` VARCHAR(255) NULL,
    `Quantité_de_produit_finis_formulation_1` DECIMAL(15,3) NULL,
    `Quantité_de_produit_finis_formulation_2` DECIMAL(15,3) NULL,
    `Quantité_de_produit_finis_formulation_3` DECIMAL(15,3) NULL,
    `Quantité_de_produit_finis_formulation_4` DECIMAL(15,3) NULL,
    `Quantité_de_produit_finis_formulation_5` DECIMAL(15,3) NULL,
    `Coût_d'achat_de_matière_première_formulation_1` DECIMAL(15,2) NULL,
    `Coût_d'achat_de_matière_première_formulation_2` DECIMAL(15,2) NULL,
    `Coût_d'achat_de_matière_première_formulation_3` DECIMAL(15,2) NULL,
    `Coût_d'achat_de_matière_première_formulation_4` DECIMAL(15,2) NULL,
    `Coût_d'achat_de_matière_première_formulation_5` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_formulation_1` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_formulation_2` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_formulation_3` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_formulation_4` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_formulation_5` DECIMAL(15,2) NULL,
    -- Informations de vente
    `Lieu_de_produit_finis_formulation` INT NULL,
    `Client_de_produit_finis_formulation` INT NULL,
    `Identifiant_commande_de_produit_finis_formulation` VARCHAR(50) NULL,
    `Date_de_vente_de_produit_finis_formulation` DATE NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Référence_de_produit_finis_formulation`),
    INDEX (`Statut_de_produit_finis_formulation`),
    INDEX (`Propriétaire_de_produit_finis_formulation`),
    INDEX (`Identifiant_commande_de_produit_finis_formulation`),
    FOREIGN KEY (`Lieu_de_produit_finis_formulation`) REFERENCES `CupiDose_lieu`(`ID`) ON DELETE SET NULL,
    FOREIGN KEY (`Client_de_produit_finis_formulation`) REFERENCES `cupidose_client`(`ID`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- 16. TABLE: CupiDose_produit_finis_achat-revente (ou cupidose_produit_finis_achat-revente)
-- Description: Produits finis achetés pour revente
-- =====================================================
CREATE TABLE IF NOT EXISTS `CupiDose_produit_finis_achat-revente` (
    `ID` INT AUTO_INCREMENT PRIMARY KEY,
    `Nom_de_produit_finis_achat-revente` VARCHAR(255) NOT NULL,
    `Catégorie_de_produit_finis_achat-revente` VARCHAR(255) NULL,
    `Format_de_produit_finis_achat-revente` VARCHAR(255) NULL,
    `Type_de_produit_finis_achat-revente` VARCHAR(255) NULL,
    `Référence_de_produit_finis_achat-revente` VARCHAR(255) NOT NULL UNIQUE,
    `Statut_de_produit_finis_achat-revente` VARCHAR(100) NULL DEFAULT 'Produit non-vendu',
    `Description_de_produit_finis_achat-revente` TEXT NULL,
    `Propriétaire_de_produit_finis_achat-revente` VARCHAR(255) NULL,
    `Image_de_produit_finis_achat-revente` LONGBLOB NULL,
    `Heure_d'ajout_de_produit_finis_achat-revente` TIME NULL,
    `Date_d'ajout_de_produit_finis_achat-revente` DATE NULL,
    `Coût_de_revient_total_de_produit_finis_achat-revente` DECIMAL(15,2) NULL,
    `Bénéfice_total_de_produit_finis_achat-revente` DECIMAL(15,2) NULL,
    `Prix_de_vente_total_de_produit_finis_achat-revente` DECIMAL(15,2) NULL,
    -- Matières premières utilisées (jusqu'à 5)
    `Nom_de_matière_première_achat-revente_1` VARCHAR(255) NULL,
    `Nom_de_matière_première_achat-revente_2` VARCHAR(255) NULL,
    `Nom_de_matière_première_achat-revente_3` VARCHAR(255) NULL,
    `Nom_de_matière_première_achat-revente_4` VARCHAR(255) NULL,
    `Nom_de_matière_première_achat-revente_5` VARCHAR(255) NULL,
    `Quantité_de_produit_finis_achat-revente_1` DECIMAL(15,3) NULL,
    `Quantité_de_produit_finis_achat-revente_2` DECIMAL(15,3) NULL,
    `Quantité_de_produit_finis_achat-revente_3` DECIMAL(15,3) NULL,
    `Quantité_de_produit_finis_achat-revente_4` DECIMAL(15,3) NULL,
    `Quantité_de_produit_finis_achat-revente_5` DECIMAL(15,3) NULL,
    `Coût_d'achat_de_matière_première_achat-revente_1` DECIMAL(15,2) NULL,
    `Coût_d'achat_de_matière_première_achat-revente_2` DECIMAL(15,2) NULL,
    `Coût_d'achat_de_matière_première_achat-revente_3` DECIMAL(15,2) NULL,
    `Coût_d'achat_de_matière_première_achat-revente_4` DECIMAL(15,2) NULL,
    `Coût_d'achat_de_matière_première_achat-revente_5` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_achat-revente_1` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_achat-revente_2` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_achat-revente_3` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_achat-revente_4` DECIMAL(15,2) NULL,
    `Prix_de_vente_de_matière_première_achat-revente_5` DECIMAL(15,2) NULL,
    -- Informations de vente
    `Lieu_de_produit_finis_achat-revente` INT NULL,
    `Client_de_produit_finis_achat-revente` INT NULL,
    `Identifiant_commande_de_produit_finis_achat-revente` VARCHAR(50) NULL,
    `Date_de_vente_de_produit_finis_achat-revente` DATE NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`Référence_de_produit_finis_achat-revente`),
    INDEX (`Statut_de_produit_finis_achat-revente`),
    INDEX (`Propriétaire_de_produit_finis_achat-revente`),
    INDEX (`Identifiant_commande_de_produit_finis_achat-revente`),
    FOREIGN KEY (`Lieu_de_produit_finis_achat-revente`) REFERENCES `CupiDose_lieu`(`ID`) ON DELETE SET NULL,
    FOREIGN KEY (`Client_de_produit_finis_achat-revente`) REFERENCES `cupidose_client`(`ID`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =====================================================
-- NOTES D'UTILISATION
-- =====================================================
-- 1. Toutes les tables utilisent InnoDB pour le support des clés étrangères
-- 2. Le charset est utf8mb4 pour supporter tous les caractères Unicode
-- 3. Les messages dans CupiDose_messages sont chiffrés avec AES-256-CBC
-- 4. Les comptes financiers sont gérés avec des DECIMAL pour éviter les erreurs d'arrondi
-- 5. Les tables de produits supportent jusqu'à 5 matières premières par produit
-- 6. Le système de référencement est automatique pour les matières premières et produits
-- 7. Les statuts de produits: 'Produit non-vendu', 'Produit en crédit', 'Produit vendu'
-- 8. Les tables utilisent created_at pour tracer la date de création
-- 9. Certaines tables peuvent avoir des alias (CupiDose_lieu = cupidose_lieu)
-- 10. La hiérarchie des catégories: Niveau 1 (Catégorie) > Niveau 2 (Sous-cat) > Niveau 3 (Type) > Niveau 4 (Marque)

-- =====================================================
-- FIN DU FICHIER SQL
-- =====================================================



