-- ═══════════════════════════════════════════════════════════════
-- 076: Game progress (Квантик — Законы Мира, Фаза 1).
--
-- Прогресс игрока по уровням игры «Квантик». Уровень идентифицируется
-- строковым level_id (напр. 'phys-artillery-1'); сами уровни — это спеки
-- SimForge (встроенные данные сейчас, custom_sims cat='game' в Ф5).
--
-- Upsert хранит ЛУЧШИЙ результат: best_time_ms (минимальное время прохождения),
-- best_stars (максимум собранных звёзд 0..3). attempts растёт на каждый submit.
-- UNIQUE(user_id, level_id) — одна строка прогресса на пару игрок-уровень.
-- user_id ON DELETE CASCADE — прогресс удаляется вместе с игроком.
-- ═══════════════════════════════════════════════════════════════

CREATE TABLE IF NOT EXISTS game_progress (
  id            INTEGER PRIMARY KEY AUTOINCREMENT,
  user_id       INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  level_id      TEXT NOT NULL,                     -- идентификатор уровня (спека)
  best_time_ms  INTEGER,                           -- лучшее (минимальное) время, мс
  best_stars    INTEGER NOT NULL DEFAULT 0,        -- лучшее число звёзд 0..3
  attempts      INTEGER NOT NULL DEFAULT 0,        -- число попыток (++ на submit)
  completed_at  TEXT DEFAULT (datetime('now')),    -- время первого прохождения
  UNIQUE (user_id, level_id)
);

CREATE INDEX IF NOT EXISTS idx_game_progress_user ON game_progress (user_id);
