#pragma once
#include "Crawler.h"
#include "DEFINES.h"
#include "olcPixelGameEngine.h"
#include "safemap.h"
#include "Item.h"
#include "MenuItemButton.h"
#include "MenuLabel.h"

INCLUDE_GFX
typedef Attribute A;

Menu*Menu::InitializeInventoryWindow(){
	constexpr int invWidth=5;
	constexpr int invHeight=3;
	constexpr int totalItemSlots=invWidth*invHeight;

	constexpr int itemSpacing=8;
	constexpr int buttonSize=24;
	constexpr int totalSpacing=buttonSize+itemSpacing;

	vf2d windowSize={totalSpacing*invWidth-itemSpacing+1,totalSpacing*(invHeight+1)-itemSpacing+24};

	Menu*inventoryWindow=new Menu(CENTERED,windowSize);

	MenuFunc useItemFunc=[](MenuFuncData data){
		MenuItemButton*button=(MenuItemButton*)data.component;
		button->UseItem();
	};
	
	for(int y=0;y<invHeight;y++){
		for(int x=0;x<invWidth;x++){
			int itemIndex=y*invWidth+x;
			MenuItemButton*button=new MenuItemButton{INVENTORY,{{float(totalSpacing*x),float(totalSpacing*y)},{float(buttonSize),float(buttonSize)}},Inventory::get("Consumables"),itemIndex,useItemFunc};		
			inventoryWindow->AddComponent("item"+std::to_string(itemIndex),button);
		}
	}
	
	MenuLabel*itemNameLabel=new MenuLabel{INVENTORY,geom2d::rect<float>(vf2d{2,invHeight*totalSpacing-4},windowSize),"",false,true};
	inventoryWindow->AddComponent("itemName",itemNameLabel);
	MenuLabel*itemDescriptionLabel=new MenuLabel{INVENTORY,geom2d::rect<float>(vf2d{2,invHeight*totalSpacing+itemSpacing},{windowSize.x-4,windowSize.y-108}),"",true,true};
	inventoryWindow->AddComponent("itemDescription",itemDescriptionLabel);

	return inventoryWindow;
}