-- =============================================================
-- Migration : Module Planification des Temps
-- Version   : 1.0  — Avril 2026
-- Sécurité  : Idempotent — peut être relancé sans risque
--             Testé MySQL 5.7+ et MySQL 8.0+
-- =============================================================

-- ─────────────────────────────────────────────────────────────
-- 1. Plafond horaire journalier dans la table core (settings)
--    Ajout conditionnel via information_schema (compatible 5.7+)
-- ─────────────────────────────────────────────────────────────
SET @db   = DATABASE();
SET @tbl  = 'core';
SET @col  = 'heures_journee_max';
SET @sql  = IF(
    (SELECT COUNT(*) FROM information_schema.COLUMNS
     WHERE TABLE_SCHEMA = @db AND TABLE_NAME = @tbl AND COLUMN_NAME = @col) = 0,
    CONCAT(
        'ALTER TABLE `', @tbl, '` ',
        'ADD COLUMN `', @col, '` ',
        'DECIMAL(4,2) NOT NULL DEFAULT 8.00 ',
        'COMMENT ''Plafond heures/jour pour la planification (ex: 8, ou 7 en ete/Ramadan)'''
    ),
    'SELECT ''[SKIP] Colonne heures_journee_max existe deja'' AS migration_info'
);
PREPARE _stmt FROM @sql;
EXECUTE _stmt;
DEALLOCATE PREPARE _stmt;

-- ─────────────────────────────────────────────────────────────
-- 2. Membres des équipes
-- ─────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `planning_equipe_membres` (
    `id`         INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    `id_equipe`  BIGINT          NOT NULL COMMENT 'referentials.id (category=equipe)',
    `id_salarie` INT UNSIGNED    NOT NULL COMMENT 'salaries.id',
    `actif`      TINYINT(1)      NOT NULL DEFAULT 1,
    `created_at` DATETIME        DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY  `uq_equipe_salarie` (`id_equipe`, `id_salarie`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ─────────────────────────────────────────────────────────────
-- 3. Responsables des équipes
-- ─────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `planning_equipe_responsables` (
    `id`        INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    `id_equipe` BIGINT          NOT NULL COMMENT 'referentials.id (category=equipe)',
    `id_user`   INT UNSIGNED    NOT NULL COMMENT 'users.id',
    `actif`     TINYINT(1)      NOT NULL DEFAULT 1,
    `created_at`DATETIME        DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY  `uq_equipe_user` (`id_equipe`, `id_user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ─────────────────────────────────────────────────────────────
-- 4. Slots de planification (table centrale)
-- ─────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `planning_slots` (
    `id`             INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    `id_salarie`     INT UNSIGNED    NOT NULL COMMENT 'salaries.id',
    `id_ticket`      INT UNSIGNED    NULL     COMMENT 'tickets.id — NULL si saisie libre',
    `tache_libre`    VARCHAR(255)    NULL     COMMENT 'Libellé libre si id_ticket IS NULL',
    `date_slot`      DATE            NOT NULL,
    `heures_planif`  DECIMAL(4,2)    NOT NULL DEFAULT 0   COMMENT 'Heures planifiees par le responsable',
    `heures_reelles` DECIMAL(4,2)    NULL                 COMMENT 'Heures reelles saisies par le salarie',
    `note_salarie`   TEXT            NULL                 COMMENT 'Explication ecart, formation, support...',
    `created_by`     INT UNSIGNED    NOT NULL COMMENT 'users.id du responsable',
    `created_at`     DATETIME        DEFAULT CURRENT_TIMESTAMP,
    `updated_at`     DATETIME        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    INDEX `idx_salarie_date` (`id_salarie`, `date_slot`),
    INDEX `idx_ticket`       (`id_ticket`),
    INDEX `idx_date`         (`date_slot`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ─────────────────────────────────────────────────────────────
-- 5. Désactiver les anciens sous-modules /saisietemps
--    Les tables saisie_temps et planification sont CONSERVÉES
--    pour l'historique — seul l'accès UI est coupé.
-- ─────────────────────────────────────────────────────────────
UPDATE `modules_sous` SET `actif` = 0
WHERE `name` IN ('saisietemps', 'saisietemps22', 'saisietmp');

-- Ancien sous-module "planification" sous le module projects (pas le nouveau)
UPDATE `modules_sous` SET `actif` = 0
WHERE `name` = 'planification' AND `id_modules` = (
    SELECT `id` FROM `modules` WHERE `name` = 'projects' AND `type` = 'main' LIMIT 1
);

-- ─────────────────────────────────────────────────────────────
-- 6. Module "Planification des temps" dans le menu
--    + 2 sous-modules (Planning équipe / Mon planning)
-- ─────────────────────────────────────────────────────────────

-- Module principal (idempotent)
INSERT INTO `modules` (`name`, `link`, `type`, `icon`, `sort`, `actif`, `default_module`)
SELECT 'planning', 'planning', 'main', 'fa fa-calendar-check-o', 9, 1, 0
FROM DUAL
WHERE NOT EXISTS (
    SELECT 1 FROM `modules` WHERE `name` = 'planning' AND `type` = 'main'
);

SET @id_planning = (SELECT `id` FROM `modules` WHERE `name` = 'planning' AND `type` = 'main' LIMIT 1);

-- Sous-module : interface responsable
INSERT INTO `modules_sous` (`id_modules`, `name`, `link`, `type`, `icon`, `sort`, `actif`)
SELECT @id_planning, 'planning_equipe', 'planning/equipe', 'main', 'fa fa-users', 1, 1
FROM DUAL
WHERE NOT EXISTS (
    SELECT 1 FROM `modules_sous` WHERE `name` = 'planning_equipe' AND `id_modules` = @id_planning
);

-- Sous-module : interface salarié
INSERT INTO `modules_sous` (`id_modules`, `name`, `link`, `type`, `icon`, `sort`, `actif`)
SELECT @id_planning, 'mon_planning', 'planning/mon', 'main', 'fa fa-calendar', 2, 1
FROM DUAL
WHERE NOT EXISTS (
    SELECT 1 FROM `modules_sous` WHERE `name` = 'mon_planning' AND `id_modules` = @id_planning
);
