#include "Crawler.h"
#include "MenuComponent.h"

MenuComponent::MenuComponent(MenuType parent,geom2d::rect<float>rect,std::string label,MenuFunc onClick,bool selectable)
	:parentMenu(parent),rect(rect),label(label),menuDest(MenuType::ENUM_END),onClick(onClick),hoverEffect(0),selectable(selectable){}

MenuComponent::MenuComponent(MenuType parent,geom2d::rect<float>rect,std::string label,MenuType menuDest,MenuFunc onClick,bool selectable)
	:parentMenu(parent),rect(rect),label(label),menuDest(menuDest),onClick(onClick),hoverEffect(0),selectable(selectable){}

void MenuComponent::Update(Crawler*game){
	if(hovered){
		hoverEffect=std::min("ThemeGlobal.HighlightTime"_F,hoverEffect+game->GetElapsedTime());
	}else{
		hoverEffect=std::max(0.f,hoverEffect-game->GetElapsedTime());
	}
}

void MenuComponent::Draw(Crawler*game,vf2d parentPos,bool focused){
	game->FillRect(rect.pos+parentPos,rect.size,PixelLerp(Menu::themes[Menu::themeSelection].GetButtonCol(),Menu::themes[Menu::themeSelection].GetHighlightCol(),hoverEffect/"ThemeGlobal.HighlightTime"_F)*(focused?1:"ThemeGlobal.MenuUnfocusedColorMult"_F));
	if(border){
		game->DrawRect(rect.pos+parentPos,rect.size,focused?GREY:GREY*"ThemeGlobal.MenuUnfocusedColorMult"_F);
	}
	game->DrawStringProp(rect.pos+parentPos+rect.size/2-game->GetTextSizeProp(label)/2,label,focused?WHITE:WHITE*"ThemeGlobal.MenuUnfocusedColorMult"_F);
}

void MenuComponent::DrawDecal(Crawler*game,vf2d parentPos,bool focused){}

MenuComponent*MenuComponent::PickUpDraggableItem(){
	return nullptr;
}

bool MenuComponent::DropDraggableItem(MenuComponent*draggable){
	return false;
}