-- Script de migration vers la base unique CLEO
-- Date: 2025-09-11
-- Version: 2.0.1

-- ==============================================================================
-- ÉTAPE 1: Création de la base CLEO
-- ==============================================================================

CREATE DATABASE IF NOT EXISTS `cleo` 
  DEFAULT CHARACTER SET utf8mb4 
  COLLATE utf8mb4_unicode_ci;

USE `cleo`;

-- ==============================================================================
-- ÉTAPE 2: Migration des tables depuis uof_linet
-- ==============================================================================

-- Tables métier principales
CREATE TABLE IF NOT EXISTS `devis` LIKE `uof_linet`.`devis`;
INSERT INTO `devis` SELECT * FROM `uof_linet`.`devis`;

CREATE TABLE IF NOT EXISTS `devis_produits` LIKE `uof_linet`.`devis_produits`;
INSERT INTO `devis_produits` SELECT * FROM `uof_linet`.`devis_produits`;

CREATE TABLE IF NOT EXISTS `devis_histo` LIKE `uof_linet`.`devis_histo`;
INSERT INTO `devis_histo` SELECT * FROM `uof_linet`.`devis_histo`;

CREATE TABLE IF NOT EXISTS `clients` LIKE `uof_linet`.`clients`;
INSERT INTO `clients` SELECT * FROM `uof_linet`.`clients`;

CREATE TABLE IF NOT EXISTS `produits` LIKE `uof_linet`.`produits`;
INSERT INTO `produits` SELECT * FROM `uof_linet`.`produits`;

CREATE TABLE IF NOT EXISTS `produits_familles` LIKE `uof_linet`.`produits_familles`;
INSERT INTO `produits_familles` SELECT * FROM `uof_linet`.`produits_familles`;

CREATE TABLE IF NOT EXISTS `marches` LIKE `uof_linet`.`marches`;
INSERT INTO `marches` SELECT * FROM `uof_linet`.`marches`;

CREATE TABLE IF NOT EXISTS `users` LIKE `uof_linet`.`users`;
INSERT INTO `users` SELECT * FROM `uof_linet`.`users`;

-- Tables de référence (x_*)
CREATE TABLE IF NOT EXISTS `x_familles` LIKE `uof_linet`.`x_familles`;
INSERT INTO `x_familles` SELECT * FROM `uof_linet`.`x_familles`;

CREATE TABLE IF NOT EXISTS `x_statuts_devis` LIKE `uof_linet`.`x_statuts_devis`;
INSERT INTO `x_statuts_devis` SELECT * FROM `uof_linet`.`x_statuts_devis`;

CREATE TABLE IF NOT EXISTS `x_clients_types` LIKE `uof_linet`.`x_clients_types`;
INSERT INTO `x_clients_types` SELECT * FROM `uof_linet`.`x_clients_types`;

-- ==============================================================================
-- ÉTAPE 3: Migration de y_pages depuis uof_frontal
-- ==============================================================================

CREATE TABLE IF NOT EXISTS `y_pages` (
  `rowid` int(11) NOT NULL AUTO_INCREMENT,
  `script` varchar(50) DEFAULT NULL,
  `titre` varchar(255) DEFAULT NULL,
  `description` text,
  `keywords` text,
  `admin` tinyint(1) DEFAULT 0,
  `active` tinyint(1) DEFAULT 1,
  `mail` tinyint(1) DEFAULT 0,
  `form` tinyint(1) DEFAULT 0,
  `sidebar` tinyint(1) DEFAULT 0,
  `chart` tinyint(1) DEFAULT 0,
  `agenda` tinyint(1) DEFAULT 0,
  `autocomplete` tinyint(1) DEFAULT 0,
  `scheduler` tinyint(1) DEFAULT 0,
  `osm` tinyint(1) DEFAULT 0,
  `vuejs` tinyint(1) DEFAULT 0,
  `files` tinyint(1) DEFAULT 0,
  `layout` varchar(50) DEFAULT 'default',
  PRIMARY KEY (`rowid`),
  KEY `idx_script` (`script`),
  KEY `idx_admin` (`admin`),
  KEY `idx_active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Import des données depuis uof_frontal.y_pages
INSERT INTO `y_pages` SELECT * FROM `uof_frontal`.`y_pages` WHERE admin = 1;

-- ==============================================================================
-- ÉTAPE 4: Migration de users_entites depuis uof_frontal
-- ==============================================================================

CREATE TABLE IF NOT EXISTS `users_entites` (
  `rowid` int(11) NOT NULL AUTO_INCREMENT,
  `appname` varchar(50) DEFAULT NULL,
  `libelle` varchar(255) DEFAULT NULL,
  `adresse1` varchar(255) DEFAULT NULL,
  `adresse2` varchar(255) DEFAULT NULL,
  `cp` varchar(10) DEFAULT NULL,
  `ville` varchar(100) DEFAULT NULL,
  `tel1` varchar(20) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `http_host` varchar(255) DEFAULT NULL,
  `groupebase` varchar(50) DEFAULT NULL,
  `genbase` varchar(50) DEFAULT NULL,
  `table_users_gen` varchar(100) DEFAULT 'users',
  `active` tinyint(1) DEFAULT 1,
  PRIMARY KEY (`rowid`),
  KEY `idx_appname` (`appname`),
  KEY `idx_http_host` (`http_host`),
  KEY `idx_active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Import des données depuis uof_frontal.users_entites
INSERT INTO `users_entites` SELECT * FROM `uof_frontal`.`users_entites`;

-- ==============================================================================
-- ÉTAPE 5: Création de la table z_logs (depuis la base logs si elle existe)
-- ==============================================================================

CREATE TABLE IF NOT EXISTS `z_logs` (
  `rowid` int(11) NOT NULL AUTO_INCREMENT,
  `fk_user` int(11) DEFAULT 0,
  `script` varchar(50) DEFAULT NULL,
  `user_agent` varchar(100) DEFAULT NULL,
  `http_host` varchar(100) DEFAULT NULL,
  `ip_client` varchar(50) DEFAULT NULL,
  `appname` varchar(50) DEFAULT NULL,
  `commentaire` text,
  `date_histo` datetime DEFAULT NULL,
  `notif` tinyint(1) DEFAULT 0,
  PRIMARY KEY (`rowid`),
  KEY `idx_user` (`fk_user`),
  KEY `idx_date` (`date_histo`),
  KEY `idx_script` (`script`),
  KEY `idx_appname` (`appname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Si la base logs existe, importer les données
-- INSERT INTO `z_logs` SELECT * FROM `logs`.`z_logs`;

-- ==============================================================================
-- ÉTAPE 6: Mise à jour des configurations
-- ==============================================================================

-- Mise à jour de users_entites pour la nouvelle configuration
UPDATE `users_entites` 
SET 
  `genbase` = 'cleo',
  `groupebase` = 'cleo',
  `table_users_gen` = 'users'
WHERE `active` = 1;

-- ==============================================================================
-- ÉTAPE 7: Création de l'utilisateur pour l'application
-- ==============================================================================

-- Créer l'utilisateur s'il n'existe pas
CREATE USER IF NOT EXISTS 'cleo_user'@'%' IDENTIFIED BY 'CleoDev2025!';

-- Donner tous les privilèges sur la base cleo
GRANT ALL PRIVILEGES ON `cleo`.* TO 'cleo_user'@'%';

-- Rafraîchir les privilèges
FLUSH PRIVILEGES;

-- ==============================================================================
-- ÉTAPE 8: Vérifications
-- ==============================================================================

-- Afficher le nombre de lignes par table
SELECT 'devis' as table_name, COUNT(*) as nb_lignes FROM devis
UNION ALL
SELECT 'devis_produits', COUNT(*) FROM devis_produits
UNION ALL
SELECT 'clients', COUNT(*) FROM clients
UNION ALL
SELECT 'produits', COUNT(*) FROM produits
UNION ALL
SELECT 'marches', COUNT(*) FROM marches
UNION ALL
SELECT 'users', COUNT(*) FROM users
UNION ALL
SELECT 'y_pages', COUNT(*) FROM y_pages
UNION ALL
SELECT 'users_entites', COUNT(*) FROM users_entites
UNION ALL
SELECT 'z_logs', COUNT(*) FROM z_logs;

-- ==============================================================================
-- FIN DE LA MIGRATION
-- ==============================================================================
-- 
-- IMPORTANT: Après exécution de ce script:
-- 1. Vérifier que toutes les données ont été correctement migrées
-- 2. Mettre à jour le fichier .env avec les nouvelles informations de connexion
-- 3. Tester l'application avec la nouvelle base
-- 4. Si tout est OK, sauvegarder les anciennes bases avant suppression
--