-- ============================================================================
-- MIGRATION: Gestion multi-contacts par client
-- Version: 2.0.3
-- Date: 2025-10-21
--
-- Description:
-- - Création de la table clients_contacts
-- - Migration des contacts existants depuis la table clients
-- - Ajout du champ fk_contact dans la table devis
--
-- IMPORTANT: Ce script ne modifie PAS la table clients (champs conservés)
-- ============================================================================

USE cleo;

-- ============================================================================
-- ÉTAPE 1: Création de la table clients_contacts
-- ============================================================================

DROP TABLE IF EXISTS `clients_contacts`;

CREATE TABLE `clients_contacts` (
  `rowid` int(11) NOT NULL AUTO_INCREMENT,
  `fk_client` int(11) NOT NULL,
  `nom` varchar(50) DEFAULT NULL,
  `prenom` varchar(50) DEFAULT NULL,
  `fonction` varchar(50) DEFAULT NULL,
  `telephone` varchar(20) DEFAULT NULL,
  `mobile` varchar(20) DEFAULT NULL,
  `email` varchar(75) DEFAULT NULL,
  `principal` tinyint(1) DEFAULT 0 COMMENT 'Contact principal du client',
  `active` tinyint(1) DEFAULT 1,
  `date_creat` datetime DEFAULT NULL,
  `fk_user_creat` int(11) DEFAULT NULL,
  `date_modif` datetime DEFAULT NULL,
  `fk_user_modif` int(11) DEFAULT NULL,
  PRIMARY KEY (`rowid`),
  UNIQUE KEY `rowid_UNIQUE` (`rowid`),
  KEY `fk_client` (`fk_client`),
  KEY `principal` (`fk_client`, `principal`),
  KEY `email` (`email`),
  CONSTRAINT `clients_contacts_fk_client` FOREIGN KEY (`fk_client`) REFERENCES `clients` (`rowid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Contacts multiples par client' `PAGE_COMPRESSED`='ON';

-- ============================================================================
-- ÉTAPE 2: Migration des contacts existants depuis la table clients
-- ============================================================================

INSERT INTO `clients_contacts` (
  `fk_client`,
  `nom`,
  `prenom`,
  `fonction`,
  `telephone`,
  `mobile`,
  `email`,
  `principal`,
  `active`,
  `date_creat`,
  `fk_user_creat`,
  `date_modif`,
  `fk_user_modif`
)
SELECT
  c.rowid AS fk_client,
  c.contact_nom AS nom,
  c.contact_prenom AS prenom,
  c.contact_fonction AS fonction,
  c.telephone,
  c.mobile,
  c.email,
  1 AS principal,
  c.active,
  c.date_creat,
  c.fk_user_creat,
  c.date_modif,
  c.fk_user_modif
FROM `clients` c
WHERE c.active = 1
  AND (
    c.contact_nom IS NOT NULL
    OR c.contact_prenom IS NOT NULL
    OR c.email IS NOT NULL
    OR c.telephone IS NOT NULL
    OR c.mobile IS NOT NULL
  );

-- ============================================================================
-- ÉTAPE 3: Ajout du champ fk_contact dans la table devis
-- ============================================================================

ALTER TABLE `devis`
  ADD COLUMN `fk_contact` int(11) DEFAULT NULL AFTER `fk_client`,
  ADD KEY `fk_contact` (`fk_contact`);

-- ============================================================================
-- ÉTAPE 4: Liaison des devis existants avec les contacts principaux
-- ============================================================================

UPDATE `devis` d
INNER JOIN `clients_contacts` cc ON d.fk_client = cc.fk_client AND cc.principal = 1
SET d.fk_contact = cc.rowid
WHERE d.fk_client > 0;

-- ============================================================================
-- ÉTAPE 5: Vérifications post-migration
-- ============================================================================

-- Nombre de clients avec contacts
SELECT COUNT(*) AS 'Clients avec contacts migrés'
FROM clients_contacts;

-- Nombre de clients actifs
SELECT COUNT(*) AS 'Total clients actifs'
FROM clients
WHERE active = 1;

-- Nombre de contacts principaux
SELECT COUNT(*) AS 'Contacts principaux'
FROM clients_contacts
WHERE principal = 1;

-- Devis avec contact associé
SELECT COUNT(*) AS 'Devis avec contact associé'
FROM devis
WHERE fk_contact IS NOT NULL;

-- Devis sans contact (à vérifier)
SELECT COUNT(*) AS 'Devis SANS contact (à vérifier)'
FROM devis
WHERE fk_client > 0 AND fk_contact IS NULL;

-- Clients sans contact migré (potentiellement vides)
SELECT c.rowid, c.code, c.libelle
FROM clients c
LEFT JOIN clients_contacts cc ON c.rowid = cc.fk_client
WHERE c.active = 1
  AND cc.rowid IS NULL
LIMIT 10;

-- ============================================================================
-- FIN DE LA MIGRATION
-- ============================================================================
