// 3. Меч
export class Mech extends Phaser.Scene {

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

    preload() {
        this.load.audio('scream', 'assets/sounds/scream.ogg');

        this.storyData = {
            '1': {
                text: 'Задыхаясь от бега, вы врываетесь в церковь. За спиной хлопает тяжёлая дубовая дверь. Внутри — темно и тихо. Горят лишь несколько свечей у алтаря. Воздух пахнет воском и гарью.',
                choices: [
                    { text: 'Позвать кого-нибудь', goto: '2' },
                    { text: 'Подойти к алтарю', goto: '3' },
                    { text: 'Оглядеться вокруг', goto: '4' }
                ]
            },
            '2': {
                text: 'Ваш голос гулко разносится по пустому залу. Эхо возвращается, умножая каждый звук. Никто не отзывается. Картина всё та же — пустота, тишина, свечи, играющие тенями по стенам.',
                choices: [
                    { text: 'Подойти к алтарю', goto: '3' },
                    { text: 'Оглядеться вокруг', goto: '4' }
                ]
            },
            '3': {
                text: 'Вы делаете несколько шагов к алтарю. Половицы тихо скрипят. Как только вы касаетесь каменного края алтаря, воздух сгустяется и чернеет. Перед вами возникает фигура демона с расплавленным лицом. Удар когтей — и всё мгновенно исчезает...',
                choices: [],
                onEnd: 'Start'
            },
            '4': {
                text: 'Вы обходите зал. На стене позади одной из колонн висит большое изображение: древняя сцена битвы. Воины сражаются с демонами, а в центре — человек, держащий в руках жезл. Его конец украшен странным символом, похожим на змею, свернувшуюся в кольцо.',
                choices: [
                    { text: 'Рассмотреть символ внимательнее', goto: '5' },
                    { text: 'Подойти к алтарю', goto: '6' }
                ]
            },
            '5': {
                text: 'Вы вглядываетесь в изображение. Символ будто слегка светится при лунном свете. Вы чувствуете лёгкий холод в груди, словно кто-то положил руку на ваше сердце. В памяти всплывает обрывок легенды: "Артефакт, что несёт свет среди мертвечины..."',
                choices: [
                    { text: 'Подойти к алтарю', goto: '6' }
                ]
            },
            '6': {
                text: 'Теперь, стоя перед алтарём, вы замечаете, что на его боковой панели вырезан тот же символ, что и на жезле в рисунке. Камень кажется податливым, как будто внутри есть тайник.',
                choices: [
                    { text: 'Попробовать открыть алтарь силой', goto: '7' },
                    { text: 'Осторожно прощупать поверхность', goto: '8' }
                ]
            },
            '7': {
                text: 'Вы наваливаетесь всем телом. Каменная плита скользит, но при этом с жутким гулом падает часть цемента. Грохот разносится по храму. Из темноты за спиной вырывается низкий вой — демон возвращается за шумом. Последнее, что вы видите — когтистая лапа, пробивающая вам грудь.',
                choices: [],
                onEnd: 'Start'
            },
            '8': {
                text: 'Под пальцами вы ощущаете неровность. Лёгкое нажатие — и механизм щёлкает. Алтарь медленно раскрывается, обнажая нишу. Внутри лежит жезл, тёплый на ощупь, с выгравированным символом змеи.',
                choices: [
                    { text: 'Взять жезл', goto: '9' }
                ]
            },
            '9': {
                text: 'Вы сжимаете жезл, чувствуя мощную пульсацию — словно предмет живёт. Позади слышится шорох. Оборачиваетесь — из тени у двери поднимается демон. Его кожа как выжженный уголь, из-под рогов струится дым.',
                choices: [
                    { text: 'Атаковать демона жезлом', goto: '10' },
                    { text: 'Попробовать убежать', goto: '11' }
                ]
            },
            '10': {
                text: 'Вы поднимаете жезл, и из его конца вырывается ослепительная вспышка. Демон завывает, плавясь в собственном черном дыму. Когда свет тускнеет, от врага остаётся лишь куча пепла. Тишина возвращается в зал.',
                choices: [
                    { text: 'Выйти из церкви', goto: '12' }
                ]
            },
            '11': {
                text: 'Вы бросаетесь к двери, но демон движется быстрее. Его когти вонзаются вам в спину, рвут плоть. Вы даже не успеваете крикнуть...',
                choices: [],
                onEnd: 'Start'
            },
            '12': {
                text: 'Сжимая жезл, вы выходите из церкви. Луна висит над городом, где бродят мертвецы. Теперь у вас есть оружие против тьмы. Вдалеке виднеется тропа к лесу — туда, где начинается путь к кладбищу и, возможно, ответы.',
                choices: [],
                onEnd: 'TarakanyiBega'
            }
        };

    }

    create() {
        // Save the current scene key to localStorage
        localStorage.setItem('Scene', this.scene.key);
        
        this.background = this.add.tileSprite(640, 360, 1280, 720, 'background_3');

        // Play background music
        this.sound.stopAll();
        this.sound.play('backgroundMusic_Church', { loop: true });

        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 (['3', '7', '11'].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
        });
    }
}
