/**
 * Реестры строковых сущностей сюжета: флаги и вары GameState.
 * Единственная точка правды: контент (диалоги, интерактивы, квесты, переходы)
 * и код сцены ссылаются на них через константы, а data/validate.ts сверяет
 * каждое строковое упоминание с реестром — опечатка падает в тестах и
 * agent:invariants, а не молча создаёт новый флаг.
 */

/**
 * Флаги сюжета: ключ = значение = id (строка в GameState/сейве).
 * Знакомства ставятся самими графами диалогов (dialogueFirst), а не кодом
 * сцены; старые ключи metElder/metTrader мигрируют (data/migrations.ts).
 */
export const FLAGS = {
    /** Познакомились со старейшиной (диалог elder_first). */
    met_elder: 'met_elder',
    /** Ирвин дал задание о колокольчиках (диалог elder_first; doneFlag стадии 1). */
    quest_bells_taken: 'quest_bells_taken',
    /** Колокольчики собраны и посажены (диалог elder_hand_in; doneFlag стадии 2). */
    quest_bells_done: 'quest_bells_done',
    /** Познакомились с Милой (диалог trader_first). */
    met_mila: 'met_mila',
    /** Мила дала вощёное полотно (диалог trader_first). */
    got_cloth: 'got_cloth',
    /** Колокол башни звенел (интерактив bell_rope). */
    rang_tower: 'rang_tower',
    /** Прочитана записка в доме Ирвина (интерактив note_elder). */
    read_note: 'read_note',
    /** Подсказка «как собирать колокольчики» уже показана (вход в пруды). */
    hint_bells: 'hint_bells',
    /** Акт 2 начался: Мила указала на разъезд («Машина дышит», trader_after). */
    act2_hook: 'act2_hook',
    /** Познакомились с Клинтом (диалог clint_first; doneFlag стадии 1 резонатора). */
    met_clint: 'met_clint',
    /** Клинт просит найти верный звон для резонатора (clint_first; стадия 2). */
    quest_resonator_taken: 'quest_resonator_taken',
    /** Резонатор настроен (диалог clint_tune; doneFlag стадии 2). */
    quest_resonator_done: 'quest_resonator_done',
    /** Клинт указал на Машину (clint_repeat; doneFlag эпилога резонатора). */
    machine_hook: 'machine_hook',
    /** Дерево-механизм №1 прозвенело (интерактив tone_tree_1). */
    tone_tree_1: 'tone_tree_1',
    /** Дерево-механизм №2 прозвенело (интерактив tone_tree_2). */
    tone_tree_2: 'tone_tree_2',
    /** Дерево-механизм №3 прозвенело (интерактив tone_tree_3). */
    tone_tree_3: 'tone_tree_3',
    /** Старая Машина уложена спать правильным звоном (интерактив old_machine). */
    machine_lulled: 'machine_lulled'
} as const;

export type FlagId = keyof typeof FLAGS;

/** Вары прогресса (числовые; значение живёт в GameState.vars): ключ = id. */
export const VARS = {
    /** Пепельные моты в сумке (подбор наростов, победы над врагами). */
    motes: 'motes',
    /** Собранные лунные колокольчики (квест «Три цветка»). */
    flowers: 'flowers',
    /** Здоровье героя между входами в локацию. */
    hp: 'hp',
    /** Побеждённые враги (отладка/статистика). */
    kills: 'kills',
    /** Смерти героя (статистика). */
    deaths: 'deaths',
    /** Резонансы башни (кат-сцена, статистика). */
    resonances: 'resonances',
    /** Собранные тоны деревьев-механизмов (квест резонатора). */
    tones: 'tones'
} as const;

export type VarId = keyof typeof VARS;

/** Синтезируемый флаг одноразового интерактива (once): used:<id>. */
export function usedFlag(id: string): string {
    return `used:${id}`;
}