#include "client/render/gui/MobTooltip.h"
#include "client/render/gui/imgui/imgui.h"
#include "client/render/gui/LifeProgress.h"
#include "client/render/gui/ImGuiTeamColor.h"

#include "client/render/WorldRenderer.h"

#include "td/game/Mobs.h"

#include "client/Client.h"

namespace td {
namespace gui {

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

}

void MobTooltip::Render() {
	if (m_Mob == nullptr) return;

	// TODO: add sender null check

	if (ImGui::GetIO().KeyShift) {
		const game::Player* sender = GetClient()->GetGame().GetPlayerById(m_Mob->GetSender());
		ImGui::BeginTooltip();
		ImGui::Text("Sender :");
		ImGui::SameLine();
		ImGui::PushStyleColor(ImGuiCol_Text, render::GetImGuiTeamColor(sender->GetTeamColor()));
		ImGui::Text("%s", sender->GetName().c_str());
		ImGui::PopStyleColor();
		ImGui::Text("Mob HP : %.1f/%i", m_Mob->GetHealth(), m_Mob->GetStats()->GetMaxLife());
		ImGui::Text("Mob Type : %s", game::MobFactory::GetMobName(m_Mob->GetType()).c_str());
		ImGui::Text("Mob Level : %i", m_Mob->GetLevel());
		ImGui::NewLine();
		ImGui::Text("Mob Stats :");
		ImGui::Text("\tMax health : %i", m_Mob->GetStats()->GetMaxLife());
		ImGui::Text("\tSpeed : %.1f", m_Mob->GetStats()->GetMovementSpeed());
		ImGui::Text("\tDamage : %.1f", m_Mob->GetStats()->GetDamage());
		ImGui::Text("\tMoney cost : %i", m_Mob->GetStats()->GetMoneyCost());
		ImGui::Text("\tEXP cost : %i", m_Mob->GetStats()->GetExpCost());
		ImGui::Text("\tEXP reward : %i", m_Mob->GetStats()->GetExpReward());
		ImGui::EndTooltip();
	} else {
		ImGui::BeginTooltip();
		RenderLifeProgress(m_Mob->GetHealth() / m_Mob->GetStats()->GetMaxLife());
		ImGui::EndTooltip();
	}
}

} // namespace gui
} // namespace td
