/**
 * Ключи аудио: спек-синтез sfx (sfxSpecs.ts, WAV не нужен) и файловые лупы
 * (ambience из tools/audio/gen.mjs). Отдельный модуль (без `?url`-импортов
 * Game) — чтобы валидатор мог сверять ключи контента с реестром в node-тестах.
 */
import { SPEC_SFX } from './sfxSpecs';

/** Спек-синтезированные sfx (без WAV, компилирует движок). */
export const SPEC_SFX_KEYS: readonly string[] = Object.keys(SPEC_SFX);

/** Файловые sfx (WAV) — пусто: все sfx переведены на спек-синтез. */
export const SFX_KEYS: readonly string[] = [];

/** Амбиент-лупы областей. */
export const AMBIENCE_KEYS = ['ambience/meadows', 'ambience/ponds', 'ambience/zvenets'] as const;

/** Локальные амбиент-слои (вода, гул, дома) и глобальные (ветер). */
export const AMBIENCE_LAYER_KEYS = [
    'ambience/ponds_water',
    'ambience/tower_hum',
    'ambience/houses',
    'ambience/wind'
] as const;

/** Все аудио-ключи игры (валидация контента; префетч только файловых). */
export const AUDIO_KEYS: readonly string[] = [
    ...SFX_KEYS,
    ...SPEC_SFX_KEYS,
    ...AMBIENCE_KEYS,
    ...AMBIENCE_LAYER_KEYS
];

/**
 * Файловые ключи аудио области (ambience + локальные слои) — для ленивого
 * префетча: сцена загрузки декодирует только стартовую область, остальные
 * декодируются при входе (playAmbience/playLoop умеют грузить на месте).
 */
export function areaAudioKeys(area: {
    ambience?: string;
    ambienceLayers?: readonly { key: string }[];
}): string[] {
    return [area.ambience ?? '', ...(area.ambienceLayers ?? []).map((l) => l.key)].filter((k) => k.length > 0);
}