#pragma once
#include "olcPixelGameEngine.h"
#include "olcPGEX_TransformedView.h"
#include "Resources.h"
#include "olcPGEX_AudioSource.h"
#include "Memory.h"

class Textbox{
	std::string headerText=""; //If a textbox has a header, it displays at the top in a special color.
	std::string displayHeaderText="";
	std::string text="";
	std::string displayText="";
	Renderable*boxImg=nullptr;
	Audio*dialogSound=nullptr;
	int soundHandle=-1;
	float audioFadeOutDelay=2;
	vf2d pos={};
	vf2d maxSize={};
	float audioVolume=0;
	float lastLetterTime=0;
	float letterDisplayDelay=0.01;
	int textboxMarker=-1;
	int lastWordMarker=-1;
	float continueWordTimer=0;
	std::string lastWord="";
	int lastHeaderWordMarker=-1;
	std::string lastHeaderWord="";
	std::vector<Memory> resourceCost; //If resource cost is greater than 0, shows them.
	bool visible=true;
	Pixel backCol=CONSTANT::MESSAGE_BOX_DEFAULT_BACKCOL;
public:
	Textbox();
	void Initialize(std::string text,vf2d pos={},std::string headerText="",Renderable*boxImg=nullptr,vf2d maxSize={120,1},Audio*dialogSound=nullptr,std::vector<Memory>resourceCost={},float letterDisplayDelay=0.01);

	void UpdateAndDraw(vf2d pos,PixelGameEngine*pge,Resources&resources,std::vector<std::unique_ptr<Renderable>>&IMAGES,int totalUsedMemory,int memoryLimit);
	std::string&GetCurrentString();
	void SetVisible(bool visible);
	vf2d GetSize();
	void SetBackgroundColor(Pixel col);
	bool IsVisible();
	bool bPressed=false;
private:
	void Update(PixelGameEngine*pge);
	void UpdatePosition(vf2d newPos);
	void Draw(PixelGameEngine*pge,Resources&resources,std::vector<std::unique_ptr<Renderable>>&IMAGES,int totalUsedMemory,int memoryLimit);
	void SetDefaults();
};