// 1. Вступление
export class Vstuplenie extends Phaser.Scene {

    constructor() {
        super('Vstuplenie');

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

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

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

        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.isTyping = false;
        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', '6', '10', '16'].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
        });
    }
}
