package com.mygdx.game;

import com.badlogic.gdx.graphics.Color;

public class AnswerChecker {

    public static void checkAnswer(AbsurdCityBuilder1 game) {
        if (game.getCurrentBuilding() == null || game.getInputText().length() == 0) {
            game.setMessageText(Localization.isRu() ? "Введите ответ!" : "Enter an answer!");
            game.setMessageColor(Color.RED);
            return;
        }

        try {
            int userAnswer = Integer.parseInt(game.getInputText().toString());
            Planet currentPlanet = game.getCurrentPlanet();

            if (userAnswer == game.getCurrentProblem().getAnswer()) {
                // Правильный ответ
                game.getCurrentBuilding().addBlock();
                
                // Увеличиваем счетчик серии правильных ответов
                GameSave.addCorrectAnswer();

                String[] planetComments = Localization.getSuccessComments(currentPlanet);
                String successMessage = Localization.blockBuilt();

                if (game.getCurrentBuilding().isComplete()) {
                    successMessage = Localization.buildingComplete() + " " + 
                        planetComments[game.getRandom().nextInt(planetComments.length)];
                    game.getBuildings().add(game.getCurrentBuilding());

                    // Создаем жителей при завершении здания
                    game.getCurrentBuilding().createCitizensForBuilding(game.getCitizens(), game.getRandom());

                    // Добавляем здание в статистику и сохраняем
                    GameSave.addBuilding(currentPlanet);
                    GameSave.saveSettings();

                    // Проверяем достижения
                    Achievements.check(game);

                    // Проверяем разблокировку планет
                    checkPlanetUnlock(game);

                    game.setCurrentBuilding(null);
                    game.setCurrentProblem(null);
                    game.setTyping(false);
                } else {
                    game.setCurrentProblem(MathProblem.generateProblem(game.getBuildings().size, game.getRandom()));
                }

                game.setMessageText(successMessage);
                game.setMessageColor(Color.GREEN);

            } else {
                // Неправильный ответ
                game.getCurrentBuilding().removeBlock();
                
                // Сбрасываем счетчик серии
                GameSave.resetCorrectStreak();

                String[] planetJokes = Localization.getWrongAnswerJokes(currentPlanet);
                String joke = planetJokes[game.getRandom().nextInt(planetJokes.length)];
                game.setWrongAnswerJoke(joke);
                game.setShowWrongAnswerJoke(true);
                game.setJokeTimer(0);

                // Создаем пузырь с шуткой
                if (game.getCitizens().size > 0) {
                    Citizen randomCitizen = game.getCitizens().get(game.getRandom().nextInt(game.getCitizens().size));
                    game.getJokeBubbles().add(new JokeBubble(joke, randomCitizen.x, randomCitizen.y + 60, game.getRandom()));
                }

                String message;
                if (game.getCurrentBuilding().constructionProgress == 0) {
                    message = (Localization.isRu() ? "Здание разрушено до основания! " : "Building destroyed! ") + joke;
                    game.setCurrentBuilding(null);
                    game.setCurrentProblem(null);
                    game.setTyping(false);
                } else {
                    message = Localization.wrongAnswer() + " " + joke;
                    game.setCurrentProblem(MathProblem.generateProblem(game.getBuildings().size, game.getRandom()));
                }

                game.setMessageText(message);
                game.setMessageColor(Color.RED);
            }

            game.updateUI();
            game.getInputText().setLength(0);

        } catch (NumberFormatException e) {
            // Обработка некорректного ввода
            game.setMessageText(Localization.enterNumber());
            game.setMessageColor(Color.RED);
            game.getInputText().setLength(0);
        }
    }

    private static void checkPlanetUnlock(AbsurdCityBuilder1 game) {
        Planet currentPlanet = game.getCurrentPlanet();
        int buildingsCount = game.getBuildings().size;

        // Проверяем условия для разблокировки Марса
        if (currentPlanet == Planet.EARTH && buildingsCount >= 3) {
            if (buildingsCount == 3) {
                String extra = Localization.isRu() 
                    ? " 🚀 Марс доступен! Нажмите ↑ для полёта!"
                    : " 🚀 Mars unlocked! Press ↑ to fly!";
                game.setMessageText(game.getMessageText() + extra);
                game.setMessageColor(Color.CYAN);
            }
        }

        // Проверяем условия для разблокировки Венеры
        if (currentPlanet == Planet.MARS && buildingsCount >= 6) {
            if (buildingsCount == 6) {
                String extra = Localization.isRu()
                    ? " 🔥 Венера доступна! Нажмите ↑ для полёта!"
                    : " 🔥 Venus unlocked! Press ↑ to fly!";
                game.setMessageText(game.getMessageText() + extra);
                game.setMessageColor(Color.ORANGE);
            }
        }

        // Бонус за много построек
        if (buildingsCount % 5 == 0) {
            String bonusMessage = getBonusMessage(currentPlanet, buildingsCount);
            game.setMessageText(game.getMessageText() + " " + bonusMessage);
        }
    }

    private static String getBonusMessage(Planet planet, int buildingsCount) {
        if (Localization.isRu()) {
            switch (planet) {
                case EARTH:
                    return "🎉 Вы построили " + buildingsCount + " зданий на Земле!";
                case MARS:
                    return "👽 Марсианская колония из " + buildingsCount + " зданий!";
                case VENUS:
                    return "🌟 Венерианский мегаполис из " + buildingsCount + " зданий!";
                default:
                    return "🏆 Достижение: " + buildingsCount + " зданий!";
            }
        } else {
            switch (planet) {
                case EARTH:
                    return "🎉 You built " + buildingsCount + " buildings on Earth!";
                case MARS:
                    return "👽 Martian colony of " + buildingsCount + " buildings!";
                case VENUS:
                    return "🌟 Venusian metropolis of " + buildingsCount + " buildings!";
                default:
                    return "🏆 Achievement: " + buildingsCount + " buildings!";
            }
        }
    }

    // Метод для получения подсказки
    public static String getHint(MathProblem problem, Planet planet) {
        String question = problem.getQuestion();

        if (Localization.isRu()) {
            switch (planet) {
                case MARS:
                    if (question.contains("+")) {
                        return "Подсказка: складывай как марсиане - от красного к красному!";
                    } else if (question.contains("-")) {
                        return "Подсказка: вычитай как улетающую ракету!";
                    } else if (question.contains("×")) {
                        return "Подсказка: умножай на количество марсоходов!";
                    }
                    break;
                case VENUS:
                    if (question.contains("+")) {
                        return "Подсказка: складывай жар как на Венере!";
                    } else if (question.contains("-")) {
                        return "Подсказка: вычитай облака кислоты!";
                    } else if (question.contains("×")) {
                        return "Подсказка: умножай как давление на Венере!";
                    }
                    break;
                default:
                    if (question.contains("+")) {
                        return "Подсказка: представь, что складываешь мультяшных зверюшек!";
                    } else if (question.contains("-")) {
                        return "Подсказка: убери лишние мультяшные детали!";
                    } else if (question.contains("×")) {
                        return "Подсказка: умножай как в мультике - всё становится больше!";
                    }
            }
            return "Подсказка: внимательно посчитай!";
        } else {
            switch (planet) {
                case MARS:
                    if (question.contains("+")) {
                        return "Hint: add like Martians - from red to red!";
                    } else if (question.contains("-")) {
                        return "Hint: subtract like a flying rocket!";
                    } else if (question.contains("×")) {
                        return "Hint: multiply by the number of rovers!";
                    }
                    break;
                case VENUS:
                    if (question.contains("+")) {
                        return "Hint: add heat like on Venus!";
                    } else if (question.contains("-")) {
                        return "Hint: subtract acid clouds!";
                    } else if (question.contains("×")) {
                        return "Hint: multiply like Venus pressure!";
                    }
                    break;
                default:
                    if (question.contains("+")) {
                        return "Hint: imagine adding cartoon creatures!";
                    } else if (question.contains("-")) {
                        return "Hint: remove extra cartoon details!";
                    } else if (question.contains("×")) {
                        return "Hint: multiply like in cartoons - everything gets bigger!";
                    }
            }
            return "Hint: calculate carefully!";
        }
    }
}
