import { GameState, type GameStateData } from '@rpg/engine';
import { FLAGS } from './ids';

/**
 * Миграции GameStateData (ось state-версии, отдельная от SAVE_VERSION):
 * регистрируются в Game один раз, применяются в state.load при чтении сейва.
 * Контракт движка: миграция сама повышает version; от старых версий к новым.
 */

/** Текущая версия формата данных состояния. */
export const STATE_DATA_VERSION = 3;

/** v1→v2: знакомства metElder/metTrader → единый snake_case реестра FLAGS. */
export function migrateV1toV2(data: GameStateData): GameStateData {
    const rename = (f: string): string =>
        f === 'metElder' ? FLAGS.met_elder : f === 'metTrader' ? FLAGS.met_mila : f;
    return { version: 2, flags: data.flags.map(rename), vars: { ...data.vars } };
}

/** v2→v3: флаг evening удалён — вечер теперь наступает по внутриигровым часам. */
export function migrateV2toV3(data: GameStateData): GameStateData {
    return {
        version: 3,
        flags: data.flags.filter((f) => f !== 'evening'),
        vars: { ...data.vars }
    };
}

/** Зарегистрировать все миграции (зовёт Game при создании состояния). */
export function registerStateMigrations(state: GameState): void {
    state.dataVersion = STATE_DATA_VERSION;
    state.addMigration(migrateV1toV2);
    state.addMigration(migrateV2toV3);
}