#include "render/gui/TowerPlacePopup.h"

#include "render/gui/imgui/imgui.h"

#include "game/Towers.h"

#include "game/client/Client.h"

namespace td {
namespace gui {

TowerPlacePopup::TowerPlacePopup(client::Client* client) : GuiWidget(client) {

}

void TowerPlacePopup::render() {
    if (ImGui::BeginPopup("TowerPlace")) {
        ImGui::BeginChild("TowerPlacePopupChild", ImVec2(800, m_TowerPopupTileHeight + 20), false, ImGuiWindowFlags_HorizontalScrollbar);
        for (int i = 0; i < (int)game::TowerType::TowerCount; i++) {
            if (i > 0) ImGui::SameLine();

            game::TowerType towerType = game::TowerType(i);
            const game::TowerInfo& towerInfo = game::getTowerInfo(towerType);

            if (!towerInfo.isBigTower() || (towerInfo.isBigTower() &&
                getClient()->getGame().getWorld().CanPlaceBigTower(m_ClickWorldPos, getClient()->getGame().getPlayer()->getID()))) {

                ImGui::BeginChild(std::to_string(i).c_str(), ImVec2(m_TowerPopupTileWidth, m_TowerPopupTileHeight), true);

                ImGui::Text(towerInfo.getName().c_str());

                ImGui::SameLine();
                ImGui::SetCursorPosX(m_TowerPopupTileWidth - 10 - ImGui::CalcTextSize("(?)").x);
                ImGui::TextDisabled("(?)");

                if (ImGui::IsItemHovered()) {
                    ImGui::BeginTooltip();
                    ImGui::Text(towerInfo.getDescription().c_str());
                    ImGui::EndTooltip();
                }

                std::string buyText = std::to_string(100) + " golds";

                ImGui::SetCursorPosY(m_TowerPopupTileHeight - m_PlaceTowerButtonHeight - 10);
                ImGui::SetCursorPosX(m_TowerPopupTileWidth / 2.0f - m_PlaceTowerButtonWidth / 2.0f);

                if (ImGui::Button(buyText.c_str(), ImVec2(m_PlaceTowerButtonWidth, m_PlaceTowerButtonHeight))) {
                    getClient()->placeTower(towerType, m_ClickWorldPos);
                    ImGui::CloseCurrentPopup();
                }

                ImGui::EndChild();
            }
        }
        ImGui::EndChild();
        ImGui::EndPopup();
    }
}

void TowerPlacePopup::setClickPos(const glm::vec2& worldPos) {
    m_ClickWorldPos = worldPos;
}

} // namespace gui
} // namespace td
