package com.mygdx.game;

import com.badlogic.gdx.graphics.Color;

public class AnswerChecker {
    private static final String[][] FUNNY_COMMENTS_BY_PLANET = {
        // Земля
        {
            "Вау! Такое здание видел только в мультиках!",
            "Архитектор сошел с ума от радости!",
            "Город стал похож на мультфильм!",
            "Это самое безумное здание в городе!",
            "Жители в восторге от этой абсурдности!",
            "Эй, это похоже на город из моих снов!",
            "Такое здание украсит любой мультфильм!"
        },
        // Марс
        {
            "Отлично! Марсианская колония растёт! 🚀",
            "На Марсе теперь есть своё безумие!",
            "Эти здания переживут любую пылевую бурю!",
            "Марсиане будут в восторге! 👽",
            "Похоже, мы колонизируем Марс!",
            "Красная планета стала разноцветнее!",
            "Это здание выглядит инопланетно круто!"
        },
        // Венера
        {
            "Горячо! Венерианский шедевр готов! 🔥",
            "Здание плавится от собственной красоты!",
            "Венера стала ещё ярче! 🌟",
            "Это здание сияет как сама Венера!",
            "Похоже, мы выживаем на Венере!",
            "Такая красота плавит сердце!",
            "Золотой век венерианской архитектуры!"
        }
    };

    private static final String[][] WRONG_ANSWER_JOKES_BY_PLANET = {
        // Земля
        {
            "Твоя математика кривее моих зданий!",
            "Даже мультяшный архитектор считает лучше!",
            "Ты что, в мультиках учился математике?",
            "Ошибка! Попробуй посчитать на пальцах ног!",
            "Неправильно! Давай еще разочек, как в мультике!",
            "Бывает! Даже мультяшные гении ошибаются!",
            "Ой, кажется, ты перепутал с мультипликацией!",
            "Неверно! Но зато здание выглядит смешнее!"
        },
        // Марс
        {
            "Неверно! Марсиане считают лучше! 👽",
            "Ошибка в расчётах! Пылевая буря съела цифры!",
            "Твоя математика не переживёт марсианскую зиму!",
            "Неудача! Даже марсоход считает точнее!",
            "Неправильно! Попробуй считать в скафандре!",
            "Ошибка! Кислородное голодание сказывается?",
            "Марсианские калькуляторы не одобряют!",
            "Неверно! Может, радиация помешала?"
        },
        // Венера
        {
            "Горячая ошибка! 🔥 Попробуй ещё!",
            "Неверно! Даже венерианская жара не оправдывает!",
            "Ошибка! Кислотные облака затуманили разум?",
            "Неправильно! Слишком жарко для точных расчётов?",
            "Провал! Венерианские калькуляторы плавятся!",
            "Неудача! Давление в 90 атмосфер давит на мозги?",
            "Ошибка! Попробуй считать в теплозащитном костюме!",
            "Неверно! Золотое сечение не спасло!"
        }
    };

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

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

            if (userAnswer == game.getCurrentProblem().getAnswer()) {
                // Правильный ответ
                game.getCurrentBuilding().addBlock();

                String[] planetComments = FUNNY_COMMENTS_BY_PLANET[planetIndex];
                String successMessage = "Отлично! Блок построен!";

                if (game.getCurrentBuilding().isComplete()) {
                    successMessage = "Успех! " + planetComments[game.getRandom().nextInt(planetComments.length)];
                    game.getBuildings().add(game.getCurrentBuilding());

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

                    // Проверяем разблокировку планет
                    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();

                String[] planetJokes = WRONG_ANSWER_JOKES_BY_PLANET[planetIndex];
                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 = "Здание разрушено до основания! " + joke;
                    game.setCurrentBuilding(null);
                    game.setCurrentProblem(null);
                    game.setTyping(false);
                } else {
                    message = "Неверно! Блок разрушен! " + 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) {
            // Обработка некорректного ввода
            Planet currentPlanet = game.getCurrentPlanet();
            String errorMessage;

            switch (currentPlanet) {
                case MARS:
                    errorMessage = "Марсиане не понимают такие цифры! Введите целое число!";
                    break;
                case VENUS:
                    errorMessage = "Слишком жарко для таких символов! Введите целое число!";
                    break;
                default:
                    errorMessage = "Введите целое число!";
            }

            game.setMessageText(errorMessage);
            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) {
                game.setMessageText(game.getMessageText() + " 🚀 Марс доступен! Нажмите ↑ для полёта!");
                game.setMessageColor(Color.CYAN);
            }
        }

        // Проверяем условия для разблокировки Венеры
        if (currentPlanet == Planet.MARS && buildingsCount >= 6) {
            // Венера уже разблокирована
            if (buildingsCount == 6) {
                game.setMessageText(game.getMessageText() + " 🔥 Венера доступна! Нажмите ↑ для полёта!");
                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) {
        switch (planet) {
            case EARTH:
                return "🎉 Вы построили " + buildingsCount + " зданий на Земле!";
            case MARS:
                return "👽 Марсианская колония из " + buildingsCount + " зданий!";
            case VENUS:
                return "🌟 Венерианский мегаполис из " + buildingsCount + " зданий!";
            default:
                return "🏆 Достижение: " + buildingsCount + " зданий!";
        }
    }

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

        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 "Подсказка: внимательно посчитай!";
    }
}
