-- =============================================================================
-- Migration 001 — Initialisation de la base de données calasgestion_tasks
-- MySQL 8.0 | utf8mb4 | utf8mb4_unicode_ci
-- Exécution : mysql -u calas -p calasgestion_tasks < migrations/001_init.sql
-- =============================================================================

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------------------------------
-- 2. projets
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `projets` (
    `id`            INT             NOT NULL AUTO_INCREMENT,
    `user_id`       INT             NOT NULL,
    `nom`           VARCHAR(200)    NOT NULL,
    `description`   TEXT            NULL     DEFAULT NULL,
    `couleur`       VARCHAR(7)      NOT NULL DEFAULT '#378ADD' COMMENT 'Code hexadécimal CSS',
    `type`          ENUM('fonctionnement','friction')
                                    NOT NULL DEFAULT 'fonctionnement',
    `priorite`      ENUM('critique','haute','normale','basse')
                                    NOT NULL DEFAULT 'normale',
    `flag_critique` TINYINT(1)      NOT NULL DEFAULT 0,
    `statut`        ENUM('actif','en_pause','termine','archive')
                                    NOT NULL DEFAULT 'actif',
    `ordre`         INT             NOT NULL DEFAULT 0 COMMENT 'Position drag & drop',
    `date_echeance` DATE            NULL     DEFAULT NULL,
    `meta`          JSON            NULL     DEFAULT NULL,
    `created_at`    TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`    TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `deleted_at`    TIMESTAMP       NULL     DEFAULT NULL,

    PRIMARY KEY (`id`),
    INDEX `idx_projets_user_statut_deleted` (`user_id`, `statut`, `deleted_at`),
    INDEX `idx_projets_date_echeance`       (`date_echeance`),

    CONSTRAINT `fk_projets_user_id`
        FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
        ON DELETE RESTRICT
        ON UPDATE CASCADE
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_unicode_ci
  COMMENT='Projets utilisateur — soft delete uniquement';

-- -----------------------------------------------------------------------------
-- 3. taches
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `taches` (
    `id`              INT          NOT NULL AUTO_INCREMENT,
    `projet_id`       INT          NOT NULL,
    `user_id`         INT          NOT NULL,
    `parent_id`       INT          NULL     DEFAULT NULL COMMENT 'Sous-tâche : référence récursive vers taches.id',
    `titre`           VARCHAR(300) NOT NULL,
    `description`     TEXT         NULL     DEFAULT NULL,
    `notes`           TEXT         NULL     DEFAULT NULL,
    `priorite`        ENUM('haute','normale','basse')
                                   NOT NULL DEFAULT 'normale',
    `statut`          ENUM('a_faire','en_cours','terminee','annulee')
                                   NOT NULL DEFAULT 'a_faire',
    `ordre`           INT          NOT NULL DEFAULT 0 COMMENT 'Position drag & drop',
    `date_echeance`   DATE         NULL     DEFAULT NULL,
    `date_completion` TIMESTAMP    NULL     DEFAULT NULL,
    `meta`            JSON         NULL     DEFAULT NULL,
    `created_at`      TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`      TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `deleted_at`      TIMESTAMP    NULL     DEFAULT NULL,

    PRIMARY KEY (`id`),
    INDEX `idx_taches_projet_statut_deleted` (`projet_id`, `statut`, `deleted_at`),
    INDEX `idx_taches_parent_id`             (`parent_id`),
    INDEX `idx_taches_user_id`               (`user_id`),
    INDEX `idx_taches_date_echeance`         (`date_echeance`),

    CONSTRAINT `fk_taches_projet_id`
        FOREIGN KEY (`projet_id`) REFERENCES `projets` (`id`)
        ON DELETE RESTRICT
        ON UPDATE CASCADE,

    CONSTRAINT `fk_taches_user_id`
        FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
        ON DELETE RESTRICT
        ON UPDATE CASCADE,

    CONSTRAINT `fk_taches_parent_id`
        FOREIGN KEY (`parent_id`) REFERENCES `taches` (`id`)
        ON DELETE RESTRICT
        ON UPDATE CASCADE
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_unicode_ci
  COMMENT='Tâches (hiérarchie récursive via parent_id) — soft delete uniquement';

-- -----------------------------------------------------------------------------
-- 4. historique
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `historique` (
    `id`              INT          NOT NULL AUTO_INCREMENT,
    `table_name`      VARCHAR(50)  NOT NULL,
    `record_id`       INT          NOT NULL,
    `champ`           VARCHAR(100) NOT NULL,
    `ancienne_valeur` TEXT         NULL     DEFAULT NULL,
    `nouvelle_valeur` TEXT         NULL     DEFAULT NULL,
    `user_id`         INT          NULL     DEFAULT NULL,
    `created_at`      TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY (`id`),
    INDEX `idx_historique_table_record` (`table_name`, `record_id`),
    INDEX `idx_historique_user_id`      (`user_id`),

    CONSTRAINT `fk_historique_user_id`
        FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
        ON DELETE RESTRICT
        ON UPDATE CASCADE
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_unicode_ci
  COMMENT='Journal des modifications par champ — immuable, pas de soft delete';

-- -----------------------------------------------------------------------------
-- 5. claude_logs
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `claude_logs` (
    `id`               INT          NOT NULL AUTO_INCREMENT,
    `user_id`          INT          NULL     DEFAULT NULL,
    `prompt`           TEXT         NOT NULL,
    `reponse`          TEXT         NULL     DEFAULT NULL,
    `action_effectuee` VARCHAR(200) NULL     DEFAULT NULL COMMENT 'ex: tache_created:42',
    `tokens_utilises`  INT          NULL     DEFAULT NULL,
    `created_at`       TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY (`id`),
    INDEX `idx_claude_logs_user_id`    (`user_id`),
    INDEX `idx_claude_logs_created_at` (`created_at`),

    CONSTRAINT `fk_claude_logs_user_id`
        FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
        ON DELETE RESTRICT
        ON UPDATE CASCADE
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_unicode_ci
  COMMENT='Traces des appels Claude — immuable, pas de soft delete';


-- -----------------------------------------------------------------------------
-- Projet exemple
-- -----------------------------------------------------------------------------
INSERT INTO `projets` (`user_id`, `nom`, `type`, `priorite`, `statut`, `ordre`, `meta`)
VALUES (
    LAST_INSERT_ID(),
    'Premier projet',
    'fonctionnement',
    'haute',
    'actif',
    1,
    JSON_OBJECT('source', 'seed')
);

-- -----------------------------------------------------------------------------
-- Tâches (2 tâches + 1 sous-tâche)
-- -----------------------------------------------------------------------------
-- On mémorise les IDs avec des variables pour éviter toute dépendance fragile.

SET @projet_id = LAST_INSERT_ID();

-- Tâche 1
INSERT INTO `taches` (`projet_id`, `user_id`, `titre`, `description`, `priorite`, `statut`, `ordre`, `meta`)
VALUES (
    @projet_id,
    @user_id,
    'Configurer l\'environnement de développement',
    'Installer PHP 8.3, Composer, MySQL 8.0 et mettre en place le fichier .env.',
    'haute',
    'a_faire',
    1,
    JSON_OBJECT('source', 'seed')
);

SET @tache1_id = LAST_INSERT_ID();

-- Sous-tâche de la tâche 1
INSERT INTO `taches` (`projet_id`, `user_id`, `parent_id`, `titre`, `description`, `priorite`, `statut`, `ordre`, `meta`)
VALUES (
    @projet_id,
    @user_id,
    @tache1_id,
    'Créer le fichier .env à partir de .env.example',
    'Copier .env.example en .env et renseigner les variables DB_HOST, DB_NAME, DB_USER, DB_PASS.',
    'normale',
    'a_faire',
    1,
    JSON_OBJECT('source', 'seed')
);

-- Tâche 2
INSERT INTO `taches` (`projet_id`, `user_id`, `titre`, `description`, `priorite`, `statut`, `ordre`, `meta`)
VALUES (
    @projet_id,
    @user_id,
    'Rédiger les spécifications fonctionnelles',
    'Définir les user stories, les wireframes et les critères d\'acceptation pour la v1.',
    'normale',
    'a_faire',
    2,
    JSON_OBJECT('source', 'seed')
);

-- =============================================================================
-- Fin de la migration 001
-- =============================================================================
