-- #migration 2026_07_06_027
-- Moteur de points/niveaux générique (LevelManager côté front, config JS).
-- Journal append-only : chaque gain de points est une ligne. Les niveaux
-- (seuils, exceptions) sont calculés côté front à partir des totaux —
-- le backend ne fait que stocker et agréger, jamais de logique de niveau.

CREATE TABLE IF NOT EXISTS user_points (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  user_id     VARCHAR(40) NOT NULL,
  category    VARCHAR(40) NOT NULL,   -- 'image_de_marque' | 'parcours_client' | 'gamme_de_tarifs' | 'engagement' | ...
  source      VARCHAR(60) NOT NULL,   -- clé du type de gain (cf. js/level-manager.js → POINT_VALUES)
  points      INT NOT NULL,
  card_id     VARCHAR(20) NULL,
  created_at  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
  INDEX idx_user_cat (user_id, category),
  INDEX idx_user_source (user_id, source)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Série de jours consécutifs avec au moins un gain de points (badge "N j.").
ALTER TABLE users
  ADD COLUMN streak_days INT NOT NULL DEFAULT 0 AFTER ca_objectif;
ALTER TABLE users
  ADD COLUMN streak_last_date DATE NULL AFTER streak_days;
