// 5. Кто здесь главный
export class KtoZdesGlavny extends Phaser.Scene {

    constructor() {
        super('KtoZdesGlavny');
        this.isTyping = false;
    }

    preload() {
        this.load.image('background', 'assets/main_background.jpg');
        this.load.audio('scream', 'assets/sounds/scream.ogg');
        
        this.storyData = {
            '1': {
                text: 'Вы выходите из мрака леса на окраину кладбища. Над туманом поднимаются покосившиеся кресты и мраморные надгробия. Воздух холоден, будто сама земля излучает смерть.',
                choices: [
                    { text: 'Осмотреться', goto: '2' },
                    { text: 'Пройти прямо к воротам кладбища', goto: '3' }
                ]
            },
            '2': {
                text: 'Вы осторожно ступаете по влажной земле. Под ногами будто что-то шевелится. Из‑под старых плит доносится слабое шипение. Сжимая жезл, вы понимаете: они уже чувствуют вас.',
                choices: [
                    { text: 'Подойти к воротам кладбища', goto: '3' },
                    { text: 'Попробовать осветить путь жезлом', goto: '4' }
                ]
            },
            '3': {
                text: 'Железные ворота кладбища открываются со скрипом. В глубине меж памятников виднеются ямы, перевёрнутые гробы. Тишина зреет, как перед бурей.',
                choices: [
                    { text: 'Крикнуть вызов демонам', goto: '5' },
                    { text: 'Осторожно войти внутрь', goto: '6' }
                ]
            },
            '4': {
                text: 'Вы взмахиваете жезлом — вспышка света прорезает туман. Из‑под земли раздаётся рев. Демоны чувствуют силу артефакта. Земля вздувается волнами, как от дыхания чудовищ.',
                choices: [
                    { text: 'Отступить назад', goto: '7' },
                    { text: 'Войти на кладбище', goto: '6' }
                ]
            },
            '5': {
                text: 'Ваш голос гулко катится между могил. В ответ тьма оживает. Земля трещит. Из трёх разных мест вспыхивают адские разломы — демоны поднимаются из-под земли. Один из них хватает вас когтистой рукой и утягивает вниз в раскалённую трещину.',
                choices: [],
                onEnd: 'Start'
            },
            '6': {
                text: 'Вы ступаете на мягкую, вздутую землю. Ветер воет, треплет кресты. Свет луны освещает центральный монумент — старую плиту с тем самым символом змеи. От неё исходят слабые искры. Похоже, именно здесь источник силы демонов.',
                choices: [
                    { text: 'Направить жезл на плиту', goto: '8' },
                    { text: 'Попробовать разрушить плиту ногой', goto: '9' }
                ]
            },
            '7': {
                text: 'Вы делаете шаг назад, но поздно. Почва под ногами проваливается, и из неё вырывается когтистая рука. Она хватает вас за лодыжку и утягивает вниз — в чёрную бездну под землёй.',
                choices: [],
                onEnd: 'Start'
            },
            '8': {
                text: 'Вы поднимаете жезл, направляя его на плиту. Воздух трещит от энергии. Свет рвётся из‑под земли, и по кладбищу раздаётся грохот — демоны пробуждаются, но не бросаются в атаку. Они ждут. Вы поняли: они вышли. Битва впереди.',
                choices: [],
                onEnd: 'PosledniyBoy'
            },
            '9': {
                text: 'Вы бьёте по плите ногой. Камень трескается, и из‑под него вырывается столп пламени. Вас мгновенно охватывает жар и тьма. Демоны получили жертву — вы стали ею.',
                choices: [],
                onEnd: 'Start'
            }
        };

    }

    create() {
        localStorage.setItem('Scene', this.scene.key);
        this.background = this.add.tileSprite(640, 360, 1280, 720, 'background');

        const graphics = this.add.graphics();
        graphics.fillStyle(0x000000, 0.8);
        graphics.fillRect(0, 360, 1280, 360);

        const textStyle = {
            fontFamily: 'monospace',
            fontSize: '28px',
            color: '#ffffff',
            wordWrap: { width: 1080, useAdvancedWrap: true }
        };
        
        this.storyText = this.add.text(100, 400, '', textStyle);
        this.choicesText = this.add.text(100, 560, '', textStyle);

        this.currentPosition = '1';
        this.displayStoryNode(this.currentPosition);

        this.input.keyboard.on('keydown', (event) => {
            if (this.isTyping) {
                // If typing, skip to the end of the current text
                if (this.typewriterTimer) {
                    this.typewriterTimer.remove();
                    this.storyText.setText(this.storyData[this.currentPosition].text);
                    this.isTyping = false;
                    this.displayChoices(this.currentPosition);
                }
                return;
            }

            const choiceIndex = parseInt(event.key) - 1;
            const currentNode = this.storyData[this.currentPosition];

            if (currentNode && currentNode.choices && currentNode.choices.length > 0 && currentNode.choices[choiceIndex]) {
                const choice = currentNode.choices[choiceIndex];
                if (typeof choice.goto === 'string') {
                    this.currentPosition = choice.goto;
                    this.displayStoryNode(this.currentPosition);
                } else if (choice.goto && choice.goto.scene) {
                    this.scene.start(choice.goto.scene);
                }
            } else if (currentNode && currentNode.choices.length === 0) {
                // End of this story branch
                if (currentNode.onEnd) {
                    if (typeof currentNode.onEnd === 'string') {
                        this.scene.start(currentNode.onEnd);
                    } else if (currentNode.onEnd.scene) {
                        this.scene.start(currentNode.onEnd.scene);
                    }
                } else {
                    // Default behavior: return to main menu
                    this.scene.start('Start');
                }
            }
        });
    }

    displayStoryNode(positionId) {
        const node = this.storyData[positionId];
        this.choicesText.setText(''); // Clear choices immediately

        if (['5', '7', '9'].includes(positionId)) {
            this.sound.play('scream');
        }

        this.typewriteText(this.storyText, node.text, 50, () => {
            this.displayChoices(positionId);
        });
    }

    displayChoices(positionId) {
        const node = this.storyData[positionId];
        let choicesStr = '';
        if (node.choices.length > 0) {
            node.choices.forEach((choice, index) => {
                choicesStr += `[${index + 1}] ${choice.text}\n`;
            });
        } else {
            choicesStr = 'Нажмите любую клавишу чтобы продолжить...';
        }
        this.choicesText.setText(choicesStr);
    }

    update() {
    }
    
    typewriteText(textObject, fullText, speed, callback) {
        this.isTyping = true;
        let charIndex = 0;
        textObject.setText('');

        this.typewriterTimer = this.time.addEvent({
            delay: 1000 / speed,
            callback: () => {
                textObject.setText(fullText.substr(0, charIndex));
                charIndex++;
                if (charIndex > fullText.length) {
                    this.typewriterTimer.remove();
                    this.isTyping = false;
                    if (callback) {
                        callback();
                    }
                }
            },
            loop: true
        });
    }
}
