-- 042_lab_sims.sql — Контент-движок лаборатории, Фаза 4.
-- Каталог симуляций в БД: метаданные + оверрайды (вкл/выкл, порядок, теги,
-- рекомендуемые, курикулумные subject/grade). Источник истины каталога для
-- админки и (опционально) для /lab. Превью-SVG остаются в коде (frontend).
--
-- Совместимость: вкл/выкл также зеркалится в app_settings.sim_disabled_ids
-- на уровне API, поэтому существующая логика lab.html не ломается.

CREATE TABLE IF NOT EXISTS lab_sims (
  id           TEXT PRIMARY KEY,                 -- id симуляции ('pendulum', ...)
  cat          TEXT NOT NULL,                    -- math | phys | chem | bio | game
  title        TEXT NOT NULL,
  subject      TEXT,                             -- курикулум (Фаза 5), напр. 'physics'
  grade        INTEGER,                          -- класс (Фаза 5)
  sort_order   INTEGER NOT NULL DEFAULT 0,
  enabled      INTEGER NOT NULL DEFAULT 1,       -- 0 = скрыта в каталоге
  featured     INTEGER NOT NULL DEFAULT 0,       -- 1 = «рекомендуемая»
  tags         TEXT NOT NULL DEFAULT '[]',       -- JSON-массив строк
  updated_at   TEXT NOT NULL DEFAULT (datetime('now'))
);

CREATE INDEX IF NOT EXISTS idx_lab_sims_sort ON lab_sims (sort_order);

-- Сид 40 симуляций в текущем порядке каталога /lab (из frontend SIMS).
INSERT OR IGNORE INTO lab_sims (id, cat, title, sort_order) VALUES
  ('graph', 'math', 'График функции', 1),
  ('graphtransform', 'math', 'Трансформации графиков', 2),
  ('geometry', 'math', 'Планиметрия', 3),
  ('triangle', 'math', 'Геометрия треугольника', 4),
  ('quadratic', 'math', 'Корни квадратного уравнения', 5),
  ('stereo', 'math', 'Стереометрия 3D', 6),
  ('probability', 'math', 'Теория вероятностей', 7),
  ('trigcircle', 'math', 'Тригонометрическая окружность', 8),
  ('normaldist', 'math', 'Нормальное распределение', 9),
  ('projectile', 'phys', 'Бросок тела', 10),
  ('pendulum', 'phys', 'Маятник', 11),
  ('collision', 'phys', 'Столкновение шаров', 12),
  ('emfield', 'phys', 'Электромагнитные поля', 13),
  ('circuit', 'phys', 'Электрические цепи', 14),
  ('hydrostatics', 'phys', 'Гидростатика', 15),
  ('dynamics', 'phys', 'Динамика', 16),
  ('opticsbench', 'phys', 'Оптическая скамья', 17),
  ('isoprocess', 'phys', 'Изопроцессы', 18),
  ('waves', 'phys', 'Волны и звук', 19),
  ('radioactive', 'phys', 'Радиоактивный распад', 20),
  ('race', 'phys', 'Гонка с задачами', 21),
  ('heatengine', 'phys', 'Тепловые двигатели', 22),
  ('logic', 'phys', 'Логические схемы', 23),
  ('molphys', 'chem', 'Молекулярная физика', 24),
  ('chemistry', 'chem', 'Химические реакции', 25),
  ('equilibrium', 'chem', 'Химическое равновесие', 26),
  ('electrolysis', 'chem', 'Электролиз', 27),
  ('bohratom', 'chem', 'Атом Бора', 28),
  ('orbitals', 'chem', 'Молекулярные орбитали', 29),
  ('titration', 'chem', 'pH и кривая титрования', 30),
  ('chemsandbox', 'chem', 'Химическая песочница', 31),
  ('stoichiometry', 'chem', 'Стехиометрия', 32),
  ('crystal', 'chem', 'Кристаллическая решётка', 33),
  ('qualanalysis', 'chem', 'Качественный анализ', 34),
  ('periodic', 'chem', 'Периодическая таблица', 35),
  ('organic', 'chem', 'Органическая химия', 36),
  ('solutions', 'chem', 'Растворы', 37),
  ('celldivision', 'bio', 'Деление клетки', 38),
  ('photosynthesis', 'bio', 'Фотосинтез и дыхание', 39),
  ('angrybirds', 'game', 'Angry Birds Physics', 40);
