-- ===================================================================
-- My Truck — Migration SQL pour DB EXISTANTE (avec table `users` déjà
-- en place pour ton autre site)
-- ===================================================================
-- À exécuter dans phpMyAdmin, sélectionne ta base de données existante
-- (gp-eff_gestion_palettes par exemple) puis onglet SQL et colle ce script.
--
-- Ce script :
--   1) Ajoute UNE colonne `must_change_password` à ta table `users`
--      existante (sans toucher aux données).
--   2) Force tous les comptes existants à choisir un nouveau code 6 chiffres
--      à leur prochaine connexion sur My Truck.
--   3) Crée les 8 tables propres à My Truck (folders, photos, history,
--      phrases, notifications, etc.) avec FK vers `users.id`.
--
-- Le rôle `admin` reste utilisé par ton autre site (non géré par My Truck).
-- My Truck n'accepte que les rôles `cariste` et `bureau`.
-- ===================================================================

SET NAMES utf8mb4;

-- -------------------------------------------------------------------
-- 1) Patch de la table users existante
-- -------------------------------------------------------------------
-- Ajoute la colonne must_change_password si elle n'existe pas
SET @col := (
  SELECT COUNT(*) FROM information_schema.columns
  WHERE table_schema = DATABASE()
    AND table_name = 'users'
    AND column_name = 'must_change_password'
);
SET @sql := IF(@col = 0,
  'ALTER TABLE users ADD COLUMN must_change_password TINYINT(1) NOT NULL DEFAULT 1',
  'SELECT "must_change_password déjà présente, skip" AS info'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

-- Ajoute la colonne mytruck_role si elle n'existe pas
-- Permet à un user GP v3 admin (role='admin') d'avoir aussi un rôle My Truck
-- sans toucher à son rôle GP v3 d'origine.
SET @col := (
  SELECT COUNT(*) FROM information_schema.columns
  WHERE table_schema = DATABASE()
    AND table_name = 'users'
    AND column_name = 'mytruck_role'
);
SET @sql := IF(@col = 0,
  'ALTER TABLE users ADD COLUMN mytruck_role VARCHAR(20) NULL',
  'SELECT "mytruck_role déjà présente, skip" AS info'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

-- Force le changement de code pour tous les comptes My Truck à leur prochaine connexion
-- (l'admin de ton site web est laissé tranquille - il n'utilise pas My Truck)
UPDATE users
   SET must_change_password = 1
 WHERE role IN ('cariste', 'bureau') OR mytruck_role IN ('cariste', 'bureau');

-- -------------------------------------------------------------------
-- 2) Tables My Truck
-- -------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS folders (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  plate VARCHAR(50) NOT NULL,
  problem MEDIUMTEXT NOT NULL,
  status ENUM('en_attente','en_cours','cloture') NOT NULL DEFAULT 'en_attente',
  cariste_id INT NOT NULL,
  cariste_name VARCHAR(255) NOT NULL DEFAULT '',
  assigned_to_id INT NULL,
  assigned_to_name VARCHAR(255) NULL,
  created_at DATETIME(6) NOT NULL,
  updated_at DATETIME(6) NOT NULL,
  date_key VARCHAR(10) NOT NULL,
  KEY ix_date_key (date_key),
  KEY ix_cariste (cariste_id),
  KEY ix_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS folder_photos (
  id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  folder_id INT NOT NULL,
  position INT NOT NULL,
  data LONGTEXT NOT NULL,
  KEY ix_folder_pos (folder_id, position),
  CONSTRAINT fk_photos_folder FOREIGN KEY (folder_id) REFERENCES folders(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS folder_history (
  id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  folder_id INT NOT NULL,
  action VARCHAR(50) NOT NULL,
  by_id INT NULL,
  by_name VARCHAR(255) NULL,
  at DATETIME(6) NOT NULL,
  label TEXT NOT NULL,
  KEY ix_folder_at (folder_id, at),
  CONSTRAINT fk_history_folder FOREIGN KEY (folder_id) REFERENCES folders(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS phrases (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  text VARCHAR(500) NOT NULL,
  created_at DATETIME(6) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS manual_notifications (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  sender_id INT NOT NULL,
  sender_name VARCHAR(255) NOT NULL,
  title VARCHAR(255) NOT NULL,
  body TEXT NOT NULL,
  created_at DATETIME(6) NOT NULL,
  recipients_count INT NOT NULL DEFAULT 0,
  KEY ix_sender (sender_id),
  KEY ix_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS manual_notification_recipients (
  id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  notification_id INT NOT NULL,
  user_id INT NOT NULL,
  read_at DATETIME(6) NULL,
  KEY ix_notif (notification_id),
  KEY ix_user (user_id),
  CONSTRAINT fk_recip_notif FOREIGN KEY (notification_id) REFERENCES manual_notifications(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS device_tokens (
  id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  user_id INT NOT NULL,
  token VARCHAR(512) NOT NULL,
  platform VARCHAR(20) NOT NULL DEFAULT 'web',
  created_at DATETIME(6) NOT NULL,
  UNIQUE KEY uq_token (token),
  KEY ix_user (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -------------------------------------------------------------------
-- 3) Conseil : passer tes comptes existants en rôle "cariste" par défaut
--    Ensuite tu pourras changer ceux qui sont bureau depuis les paramètres
--    de My Truck (admin/admin sur ton site reste séparé).
-- -------------------------------------------------------------------
-- Décommente la ligne suivante si tu veux d'un coup mettre tous tes
-- users en "cariste" (sauf admins) :
--
-- UPDATE users SET role = 'cariste' WHERE role NOT IN ('admin','bureau');
--
-- Pour passer une personne en bureau (à exécuter au cas par cas) :
--
-- UPDATE users SET role = 'bureau' WHERE username = 'mathieu.u';
