-- Script de création/vérification de la table clients
-- Date: 15 décembre 2025
-- Description: Structure complète pour la gestion des clients

-- Table clients
CREATE TABLE IF NOT EXISTS `clients` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL COMMENT 'Nom du client',
  `email` VARCHAR(255) DEFAULT NULL COMMENT 'Email du client',
  `phone` VARCHAR(50) DEFAULT NULL COMMENT 'Téléphone principal',
  `address` TEXT DEFAULT NULL COMMENT 'Adresse complète',
  `city` VARCHAR(100) DEFAULT NULL COMMENT 'Ville',
  `country` VARCHAR(100) DEFAULT 'Côte d''Ivoire' COMMENT 'Pays',
  `contact_person` VARCHAR(255) DEFAULT NULL COMMENT 'Nom de la personne de contact',
  `contact_phone` VARCHAR(50) DEFAULT NULL COMMENT 'Téléphone de la personne de contact',
  `notes` TEXT DEFAULT NULL COMMENT 'Notes internes',
  `active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT 'Client actif (1) ou inactif (0)',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`),
  KEY `idx_active` (`active`),
  KEY `idx_email` (`email`),
  KEY `idx_city` (`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Table des clients';

-- Vérifier si la table locations a bien la foreign key vers clients
-- (Normalement déjà existante mais on vérifie)
ALTER TABLE `locations` 
  ADD CONSTRAINT `fk_locations_client` 
  FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) 
  ON DELETE RESTRICT ON UPDATE CASCADE;

-- Vérifier si la table incidents a bien la foreign key vers clients
-- (Normalement déjà existante mais on vérifie)
ALTER TABLE `incidents` 
  ADD CONSTRAINT `fk_incidents_client` 
  FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) 
  ON DELETE RESTRICT ON UPDATE CASCADE;

-- Insertion de quelques clients de démonstration (si la table est vide)
INSERT IGNORE INTO `clients` (`id`, `name`, `email`, `phone`, `address`, `city`, `country`, `contact_person`, `contact_phone`, `notes`, `active`) VALUES
(1, 'Orange Côte d''Ivoire', 'contact@orange.ci', '+225 27 20 10 00 00', 'Boulevard Lagunaire, Cocody', 'Abidjan', 'Côte d''Ivoire', 'Jean KOUASSI', '+225 07 12 34 56 78', 'Client principal - Opérateur télécom', 1),
(2, 'MTN CI', 'info@mtn.ci', '+225 27 20 30 00 00', 'Avenue Terrasson de Fougères, Plateau', 'Abidjan', 'Côte d''Ivoire', 'Marie DIABATE', '+225 05 23 45 67 89', 'Opérateur télécom majeur', 1),
(3, 'Banque Atlantique', 'contact@banqueatlantique.ci', '+225 27 21 15 00 00', 'Boulevard Carde, Plateau', 'Abidjan', 'Côte d''Ivoire', 'Pierre TOURE', '+225 01 34 56 78 90', 'Secteur bancaire', 1);

-- Afficher un résumé
SELECT 
    'clients' as table_name,
    COUNT(*) as total_records,
    SUM(CASE WHEN active = 1 THEN 1 ELSE 0 END) as active_clients,
    SUM(CASE WHEN active = 0 THEN 1 ELSE 0 END) as inactive_clients
FROM clients;

-- Afficher les clients avec leurs statistiques
SELECT 
    c.id,
    c.name,
    c.email,
    c.phone,
    c.city,
    c.active,
    COUNT(DISTINCT l.id) as locations_count,
    COUNT(DISTINCT i.id) as incidents_count
FROM clients c
LEFT JOIN locations l ON l.client_id = c.id
LEFT JOIN incidents i ON i.client_id = c.id
GROUP BY c.id
ORDER BY c.name;
