#pragma once
#include "Client.h"
#include "Utils/StringUtils.h"

namespace Utils {
	class ImGuiRender {
	private:
		inline static ImDrawList* list;
		inline static ImColor color;
		inline static ImColor secondcolor;
		inline static ImFont* font;
		inline static float size;
		inline static float thickness;
		inline static float round;
		inline static float blurstreangth;
		inline static int segments;

		inline static bool outline;

	public:
		static auto getCustomFontSize() -> float;

		static auto setDrawList(ImDrawList*) -> void;
		static auto setColor(ImColor) -> void;
		static auto setSecondColor(ImColor) -> void;
		static auto setFont(ImFont*) -> void;
		static auto setSize(float) -> void;
		static auto setThickness(float) -> void;
		static auto setRound(float) -> void;
		static auto setBlurStreangth(float) -> void;
		static auto setSegments(int) -> void;

		static auto setOutline(bool) -> void;


		static auto drawText(std::string, ImVec2) -> void;

		static auto fillRectangle(ImVec4) -> void;
		static auto fillRectangleCustomRadius(ImVec4, ImVec4) -> void;
		static auto fillShadowRectangle(ImVec4) -> void;
		static auto fillBlurRectangle(ImVec4) -> void;
		static auto fillBlurRectangleWithClip(ImVec4, ImVec4) -> void;
		static auto fillGradientOpaqueRectangle(ImVec4) -> void;
		static auto fillCircle(ImVec2) -> void;
		static auto fillShadowCircle(ImVec2) -> void;
		static auto drawShadow(ImVec2) -> void;
		static auto drawLine(ImVec2, ImVec2) -> void;
		static auto drawCircle(ImVec2) -> void;
		static auto drawRectangle(ImVec4) -> void;
		static auto pushClip(ImVec4 pos) -> void;
		static auto popClip() -> void;
		static auto getTextSize(std::string str) -> ImVec2;
		static auto isHoveringRect(ImVec4 pos) -> bool;

		static auto getWorldPosition(glm::vec3 pos) -> ImVec2;
		static auto fillBox(glm::vec3 lower, glm::vec3 upper) -> void;
		static auto drawBox(glm::vec3 lower, glm::vec3 upper) -> void;
	};
}
