package com.mygdx.game;

import com.badlogic.gdx.math.Rectangle;

public class BuildingPlacer {
    public static void startNewBuildingAt(AbsurdCityBuilder1 game, float worldX, float worldY) {
        Planet planet = game.getCurrentPlanet();
        String[] planetBuildings = Building.BUILDING_TYPES_BY_PLANET[planet.ordinal()];
        String selectedType = planetBuildings[game.getSelectedBuildingType()];

        float width, height;

        // Разные размеры для разных планет
        switch (planet) {
            case EARTH:
                switch (game.getSelectedBuildingType()) {
                    case 0: width = 180; height = 200; break; // Уютный Домик
                    case 1: width = 160; height = 180; break; // Детская Больница
                    case 2: width = 190; height = 170; break; // Весёлая Школа
                    case 3: width = 200; height = 160; break; // Игровая Площадка
                    case 4: width = 140; height = 180; break; // Надёжный Банк
                    case 5: width = 130; height = 160; break; // Здоровая Аптека
                    case 6: width = 190; height = 200; break; // Волшебный Театр
                    case 7: width = 180; height = 170; break; // КиноМир
                    default: width = 180; height = 200; break;
                }
                break;
            case MARS:
                // Марсианские здания (компактнее)
                switch (game.getSelectedBuildingType()) {
                    case 0: width = 150; height = 180; break; // Марсианская База
                    case 1: width = 140; height = 160; break; // Красная Лаборатория
                    case 2: width = 170; height = 150; break; // Космопорт
                    case 3: width = 160; height = 170; break; // Энергокупол
                    case 4: width = 130; height = 160; break; // Водородный Завод
                    case 5: width = 120; height = 150; break; // Обсерватория
                    case 6: width = 140; height = 140; break; // Робо-Фабрика
                    case 7: width = 150; height = 160; break; // Биокупол
                    default: width = 150; height = 160; break;
                }
                break;
            case VENUS:
                // Венерианские здания (выше)
                switch (game.getSelectedBuildingType()) {
                    case 0: width = 130; height = 200; break; // Вулканический Дом
                    case 1: width = 160; height = 190; break; // Термальная Станция
                    case 2: width = 180; height = 210; break; // Золотой Дворец
                    case 3: width = 170; height = 180; break; // Облачный Город
                    case 4: width = 140; height = 170; break; // Кристальная Шахта
                    case 5: width = 120; height = 160; break; // Теплица
                    case 6: width = 150; height = 190; break; // Вихревой Генератор
                    case 7: width = 160; height = 210; break; // Сияющая Башня
                    default: width = 150; height = 190; break;
                }
                break;
            default:
                width = 180; height = 200; break;
        }

        float x = worldX;
        float y = worldY;

        if (x < 10) x = 10;
        if (x + width > game.getWIDTH() - 10) x = game.getWIDTH() - width - 10;
        if (y + height > game.getHEIGHT()) y = game.getHEIGHT() - height;
        if (y < game.getUI_INPUT_HEIGHT() + 10) y = game.getUI_INPUT_HEIGHT() + 10;

        Building tempBuilding = new Building(selectedType, x, y, width, height, game.getRandom(), planet);
        tempBuilding.isOverlapping = checkForOverlaps(tempBuilding, game.getBuildings());
        game.setCurrentBuilding(tempBuilding);
        game.setCurrentProblem(MathProblem.generateProblem(game.getBuildings().size, game.getRandom()));

        game.updateUI();

        game.setMessageText(tempBuilding.isOverlapping ?
            "🎨 Здание пересекается с существующими! Это добавляет уникальности! 🎨" :
            "🌟 Отличное место для строительства! Введите ответ: 🌟");
        game.setMessageColor(tempBuilding.isOverlapping ? com.badlogic.gdx.graphics.Color.ORANGE : com.badlogic.gdx.graphics.Color.GREEN);

        game.setTyping(true);
        game.getInputText().setLength(0);
    }

    public static void handleBuildingClick(AbsurdCityBuilder1 game, float worldX, float worldY) {
        if (game.getCurrentBuilding() != null) {
            Rectangle buildingBounds = game.getCurrentBuilding().getBounds();
            if (buildingBounds.contains(worldX, worldY)) {
                game.setMessageText("🎯 Кликните вне здания для нового строительства. Ctrl+Z или Delete для удаления. 🎯");
                game.setMessageColor(com.badlogic.gdx.graphics.Color.CYAN);
            } else {
                if (!game.isTyping()) {
                    startNewBuildingAt(game, worldX, worldY);
                }
            }
        } else {
            startNewBuildingAt(game, worldX, worldY);
        }
    }

    private static boolean checkForOverlaps(Building building, com.badlogic.gdx.utils.Array<Building> buildings) {
        for (Building existing : buildings) {
            if (isOverlapping(building.x, building.width, existing.x, existing.width)) {
                return true;
            }
        }
        return false;
    }

    private static boolean isOverlapping(float x1, float width1, float x2, float width2) {
        return x1 < x2 + width2 && x1 + width1 > x2;
    }
}
