import type { Vec2 } from '@rpg/engine';
import type { FlagId } from './ids';

/**
 * NPC локации: позиция в юнитах, спрайт/атлас, диалоги и флаг сюжета
 * после первого разговора. Тайл привязки вычисляется из pos при загрузке
 * модуля — снапшот/валидатор/клики читают `tile`, реестр объектов — `pos`.
 */
export interface NpcDef {
    id: string;
    name: string;
    /** Позиция ног в мировых юнитах (центр тайла = координата + 0.5). */
    pos: Vec2;
    /** Тайл привязки (floor от pos; вычисляется — в контенте не писать). */
    tile: { x: number; y: number };
    /** Ключ спрайта в ассетах (chars/<sprite>.png). */
    sprite: string;
    /** Атлас idle-анимации (по умолчанию chars/npcs_sheet.json). */
    atlas?: string;
    /** Первый диалог (когда флаг ещё не поднят). */
    dialogueFirst: string;
    /** Повторный диалог. */
    dialogueRepeat: string;
    /** Флаг, поднимаемый после первого диалога. */
    flagKey: FlagId;
}

const NPCS_RAW: Omit<NpcDef, 'tile'>[] = [
    {
        id: 'elder',
        name: 'Старейшина Ирвин',
        pos: { x: 12.5, y: 9.5 },
        sprite: 'elder_irwin',
        dialogueFirst: 'elder_first',
        dialogueRepeat: 'elder_repeat',
        flagKey: 'metElder'
    },
    {
        id: 'trader',
        name: 'Торговка Мила',
        pos: { x: 17.5, y: 11.5 },
        sprite: 'trader_mila',
        dialogueFirst: 'trader_first',
        dialogueRepeat: 'trader_repeat',
        flagKey: 'metTrader'
    }
];

export const NPCS: NpcDef[] = NPCS_RAW.map((d) => ({
    ...d,
    tile: { x: Math.floor(d.pos.x), y: Math.floor(d.pos.y) }
}));