import type { DialogueGraph } from '@rpg/engine';

/**
 * Диалоги NPC как графы для DialogueRunner (по docs/world.md, акт 1).
 * Мила — безгласная: говорит шёпотом, коротко. Ирвин — экономит дыхание.
 *
 * Флаги сюжета:
 *   met_elder         — познакомились с Ирвином
 *   quest_bells_taken — Ирвин дал задание о колокольчиках
 *   quest_bells_done  — колокольчики собраны и посажены (акт 1, дальше)
 *   met_mila          — познакомились с Милой
 *   got_cloth         — Мила дала вощёное полотно
 */
export const DIALOGUES: Record<string, DialogueGraph> = {
    elder_first: {
        start: 'greet',
        nodes: {
            greet: {
                speaker: 'Старейшина Ирвин',
                text: 'Вернулся. Хорошо. Слышал гул на закате? Это пепел дышит у прудов.',
                next: 'ask'
            },
            ask: {
                speaker: 'Старейшина Ирвин',
                text: 'Три поляны лунных колокольчиков там, у Серых прудов. Если не собрать цветы до выдоха — задохнутся.',
                next: 'task'
            },
            task: {
                speaker: 'Старейшина Ирвин',
                text: 'Собери. Посади здесь, на лугу. Поляна без цветов — поляна без завтра.',
                next: 'give'
            },
            // Узел-действие: выдача задания без реплики.
            give: { setFlags: ['met_elder', 'quest_bells_taken'], next: 'ring' },
            ring: { speaker: 'Звонарь', text: 'Прозвоню дорогу до прудов и вернусь до темноты.' }
        }
    },

    elder_repeat: {
        start: 'waiting',
        nodes: {
            waiting: { speaker: 'Старейшина Ирвин', text: 'Цветы ждут у прудов, звонарь. А пепел не ждёт.' }
        }
    },

    // Сдача квеста: выбирается в talkTo, когда собрано достаточно цветов.
    elder_hand_in: {
        start: 'count',
        nodes: {
            count: {
                speaker: 'Старейшина Ирвин',
                text: 'Три цветка. Живые. Сажай у тропы, звонарь. Серая земля примет.',
                next: 'accept'
            },
            accept: { setFlags: ['quest_bells_done'], next: 'ring' },
            ring: { speaker: 'Звонарь', text: 'Пусть гудят. Это твой голос, Ирвин, — теперь в земле.' }
        }
    },

    trader_first: {
        start: 'stop',
        nodes: {
            stop: {
                speaker: 'Торговка Мила',
                text: '*звонит ручным колокольчиком дважды* ...Стой.',
                next: 'warn'
            },
            warn: {
                speaker: 'Торговка Мила',
                text: 'У прудов... свежий накат. Дышать поверх — голос отдашь. Как я отдала.',
                next: 'gift'
            },
            gift: {
                speaker: 'Торговка Мила',
                text: 'Держи вощёное полотно. На губы. И звони тихо — пепел не буди.',
                next: 'give_cloth'
            },
            give_cloth: { setFlags: ['met_mila', 'got_cloth'], next: 'reply' },
            reply: { speaker: 'Звонарь', text: 'Спасибо, Мила. Верну и полотно, и голос — твой точно.' }
        }
    },

    // Повторная Мила: до сдачи квеста.
    trader_repeat: {
        start: 'quiet',
        nodes: {
            quiet: {
                speaker: 'Торговка Мила',
                text: '*колокольчик один раз* ...Звони тихо. Пепел просыпается от гулкого.',
                end: true
            }
        }
    },

    // Мила после посадки: крючок акта 1.
    trader_after: {
        start: 'listen',
        nodes: {
            listen: {
                speaker: 'Торговка Мила',
                text: '*смотрит под ноги* ...Слышишь? Гул снизу. Это разъезд. Это Машина дышит.',
                end: true
            }
        }
    }
};