#include "client/render/gui/TowerPlacePopup.h"

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

#include "td/game/Towers.h"

#include "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("%s", towerInfo.GetName().c_str());

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

				if (ImGui::IsItemHovered()) {
					ImGui::BeginTooltip();
					ImGui::Text("%s", 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 Vec2f& worldPos) {
	m_ClickWorldPos = worldPos;
}

} // namespace gui
} // namespace td
