-- ═══════════════════════════════════════════════════════════════
-- 083: Пул текстовых задач тренажёра (Уровень 1, Фаза 3).
--
-- Кэш сгенерированных LLM и ПРОВЕРЕННЫХ задач: модель предлагает условие +
-- уравнение (lhs/rhs) + корень, сервер подтверждает подстановкой (practiceVerify)
-- и только тогда пишет сюда. Ученик берёт готовые задачи из пула (не платим за
-- генерацию на каждый показ). story и заметки решения уже санитизированы.
--   status: approved (видна ученикам) | draft (на ревью учителю).
-- created_by ON DELETE SET NULL — задача переживает удаление автора.
-- ═══════════════════════════════════════════════════════════════

CREATE TABLE IF NOT EXISTS practice_problems (
  id            INTEGER PRIMARY KEY AUTOINCREMENT,
  topic         TEXT NOT NULL,                         -- word-linear | word-proportion | word-percent
  skill         TEXT NOT NULL,                         -- ключ навыка (для прогресса)
  difficulty    INTEGER NOT NULL DEFAULT 1,
  story         TEXT NOT NULL,                         -- условие словами (экранировано)
  lhs           TEXT NOT NULL,                         -- левая часть уравнения (выражение от x)
  rhs           TEXT NOT NULL,                         -- правая часть
  answer_var    TEXT NOT NULL DEFAULT 'x',
  answer        REAL NOT NULL,                         -- проверенный корень
  solution_json TEXT,                                  -- шаги [{note,tex}] (JSON)
  status        TEXT NOT NULL DEFAULT 'approved',      -- approved | draft
  created_by    INTEGER REFERENCES users(id) ON DELETE SET NULL,
  created_at    TEXT DEFAULT (datetime('now'))
);

CREATE INDEX IF NOT EXISTS idx_practice_problems_skill ON practice_problems (skill, status);
