#include "StatProperty.h"

#include <sstream>

StatProperty::StatProperty(eStatTypes type, eStatModifier modifier, float value) {
	this->type = type;
	this->modifier = modifier;
	this->value = value;
}

std::string StatProperty::HtmlString() {
	// "<font color=\"#38B6FF\">Physical: +20%</font>\n..."

	std::stringstream ss;
	ss << "<font color=\"";

	switch (type)
	{
	case eStatTypes::Health:
		ss << "#FF0000";
		break;
	case eStatTypes::Armor:
		ss << "#525252";
		break;
	case eStatTypes::Imagination:
		ss << "#0077FF";
		break;
	case eStatTypes::Physical:
		ss << "#FF9500";
		break;
	case eStatTypes::Electric:
		ss << "#0059FF";
		break;
	case eStatTypes::Corruption:
		ss << "#5500FF";
		break;
	case eStatTypes::Heat:
		ss << "#FF6A00";
		break;
	case eStatTypes::Shadow:
		ss << "#0D0061";
		break;
	case eStatTypes::Pierce:
		ss << "#611200";
		break;
	case eStatTypes::Vitality:
		ss << "#2D0800";
		break;
	case eStatTypes::Domination:
		ss << "#CF00A5";
		break;
	default:
		ss << "#FFFFFF";
		break;
	}

	ss << "\">";

	switch (type)
	{
	case eStatTypes::Health:
		ss << "Health";
		break;
	case eStatTypes::Armor:
		ss << "Armor";
		break;
	case eStatTypes::Imagination:
		ss << "Imagination";
		break;
	case eStatTypes::Physical:
		ss << "Physical";
		break;
	case eStatTypes::Electric:
		ss << "Electric";
		break;
	case eStatTypes::Corruption:
		ss << "Corruption";
		break;
	case eStatTypes::Heat:
		ss << "Heat";
		break;
	case eStatTypes::Shadow:
		ss << "Shadow";
		break;
	case eStatTypes::Pierce:
		ss << "Pierce";
		break;
	case eStatTypes::Vitality:
		ss << "Vitality";
		break;
	case eStatTypes::Domination:
		ss << "Domination";
		break;
	default:
		ss << "Unknown";
		break;
	}

	switch (modifier)
	{
	case eStatModifier::DamageResistance:
		ss << " Resistance";
		break;
	case eStatModifier::DamagePercent:
	case eStatModifier::DamageAbsolute:
		ss << " Damage";
		break;
	}

	ss << "</font>";

	switch (modifier)
	{
	case eStatModifier::Percent:
	case eStatModifier::DamagePercent:
	case eStatModifier::DamageResistance:
		{
			float percent = value * 100.0f;
			// Round to 2 decimal places
			percent = static_cast<float>(static_cast<int32_t>(percent * 100.0f)) / 100.0f;
			ss << ": +" << percent << "%";
		}
		break;
	case eStatModifier::Absolute:
	case eStatModifier::DamageAbsolute:
	default:
		ss << ": +" << value;
		break;
	}

	return ss.str();
}