-- ============================================================
-- COACH IMMO - Script d'installation de base de données
-- Version : 1.0 - Compatible avec base de données existante
-- ============================================================
-- Ce script vérifie l'existence des tables avant de les créer
-- et n'insère les données de démo que si nécessaire
-- ============================================================

-- Utiliser votre base de données existante
-- USE votre_nom_de_base;

-- ============================================================
-- CRÉATION DES TABLES (uniquement si elles n'existent pas)
-- ============================================================

-- Table users
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(150) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Table projects
CREATE TABLE IF NOT EXISTS projects (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(200) NOT NULL,
    why TEXT NOT NULL,
    category ENUM('immo', 'ministere', 'business', 'perso', 'autre') DEFAULT 'immo',
    importance TINYINT UNSIGNED NOT NULL,
    urgency TINYINT UNSIGNED NOT NULL,
    main_deadline DATE NULL,
    status ENUM('en_cours', 'en_pause', 'termine', 'abandonne') DEFAULT 'en_cours',
    is_focus TINYINT(1) DEFAULT 0,
    next_actions TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_user_focus (user_id, is_focus),
    INDEX idx_user_status (user_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Table tasks (renommée en coach_tasks pour éviter conflit avec votre table tasks existante)
CREATE TABLE IF NOT EXISTS coach_tasks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    project_id INT NULL,
    title VARCHAR(200) NOT NULL,
    description TEXT NULL,
    due_date DATE NULL,
    priority ENUM('basse', 'normale', 'haute') DEFAULT 'normale',
    status ENUM('a_faire', 'en_cours', 'terminee', 'annulee') DEFAULT 'a_faire',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_user_status (user_id, status),
    INDEX idx_user_date (user_id, due_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- AJOUT DES CLÉS ÉTRANGÈRES (si elles n'existent pas déjà)
-- ============================================================

-- Vérifier et ajouter la clé étrangère pour projects.user_id
SET @fk_exists = (
    SELECT COUNT(*) 
    FROM information_schema.TABLE_CONSTRAINTS 
    WHERE CONSTRAINT_SCHEMA = DATABASE() 
    AND TABLE_NAME = 'projects' 
    AND CONSTRAINT_NAME = 'fk_projects_users'
);

SET @sql = IF(@fk_exists = 0, 
    'ALTER TABLE projects ADD CONSTRAINT fk_projects_users FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE',
    'SELECT "Foreign key fk_projects_users already exists" AS info'
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

-- Vérifier et ajouter la clé étrangère pour coach_tasks.user_id
SET @fk_exists = (
    SELECT COUNT(*) 
    FROM information_schema.TABLE_CONSTRAINTS 
    WHERE CONSTRAINT_SCHEMA = DATABASE() 
    AND TABLE_NAME = 'coach_tasks' 
    AND CONSTRAINT_NAME = 'fk_coach_tasks_users'
);

SET @sql = IF(@fk_exists = 0, 
    'ALTER TABLE coach_tasks ADD CONSTRAINT fk_coach_tasks_users FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE',
    'SELECT "Foreign key fk_coach_tasks_users already exists" AS info'
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

-- Vérifier et ajouter la clé étrangère pour coach_tasks.project_id
SET @fk_exists = (
    SELECT COUNT(*) 
    FROM information_schema.TABLE_CONSTRAINTS 
    WHERE CONSTRAINT_SCHEMA = DATABASE() 
    AND TABLE_NAME = 'coach_tasks' 
    AND CONSTRAINT_NAME = 'fk_coach_tasks_projects'
);

SET @sql = IF(@fk_exists = 0, 
    'ALTER TABLE coach_tasks ADD CONSTRAINT fk_coach_tasks_projects FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL',
    'SELECT "Foreign key fk_coach_tasks_projects already exists" AS info'
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

-- ============================================================
-- INSERTION DES DONNÉES PAR DÉFAUT (uniquement si nécessaire)
-- ============================================================

-- Insérer l'utilisateur par défaut uniquement s'il n'existe pas
INSERT IGNORE INTO users (id, name, email, password_hash) 
VALUES (1, 'Agent Immobilier', 'agent@coachimmo.local', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');

-- ============================================================
-- DONNÉES DE DÉMONSTRATION (OPTIONNEL - À COMMENTER SI NON SOUHAITÉ)
-- ============================================================
-- Décommentez les lignes ci-dessous si vous voulez des données de démo

/*
-- Projets de démonstration
INSERT IGNORE INTO projects (id, user_id, title, why, category, importance, urgency, main_deadline, is_focus, next_actions) VALUES
(1, 1, 'Développer mon portefeuille clients haut de gamme', 'Augmenter mes revenus de 30% et travailler avec des clients plus qualitatifs qui respectent mon expertise', 'business', 5, 4, '2025-06-30', 1, '1. Créer une page LinkedIn professionnelle\n2. Identifier 10 prospects potentiels\n3. Préparer un dossier de présentation premium'),
(2, 1, 'Obtenir la certification "Expertise Immobilier Luxe"', 'Me différencier de la concurrence et légitimer ma montée en gamme', 'ministere', 4, 5, '2025-03-15', 1, '1. S''inscrire à la formation\n2. Réviser le module 1\n3. Préparer l''examen blanc'),
(3, 1, 'Vendre l''appartement 3 pièces rue de la Paix', 'Commission importante + client fidèle qui peut recommander', 'immo', 5, 5, '2025-01-31', 1, '1. Organiser 3 visites cette semaine\n2. Négocier avec le prospect intéressé\n3. Préparer le dossier de vente');

-- Tâches de démonstration
INSERT IGNORE INTO coach_tasks (id, user_id, project_id, title, due_date, priority, status) VALUES
(1, 1, 1, 'Rédiger 3 posts LinkedIn sur mes dernières ventes', '2025-11-24', 'haute', 'a_faire'),
(2, 1, 2, 'Réviser le chapitre sur la fiscalité immobilière', '2025-11-24', 'haute', 'a_faire'),
(3, 1, 3, 'Appeler Mme Dupont pour confirmer la visite de demain', '2025-11-24', 'haute', 'a_faire'),
(4, 1, 3, 'Préparer le dossier de présentation pour l''appartement', '2025-11-23', 'haute', 'en_cours'),
(5, 1, NULL, 'Faire le point comptable du mois', '2025-11-25', 'normale', 'a_faire');
*/

-- ============================================================
-- FIN DU SCRIPT
-- ============================================================

SELECT 'Installation terminée avec succès !' AS message;
