#include "utils.h"
#include "olcPixelGameEngine.h"

float util::random(float range){
	return float(rand())/RAND_MAX*range;
}

vf2d util::pointTo(vf2d posFrom,vf2d posTo){
	return geom2d::line(posFrom,posTo).vector().norm();
}

float util::angleTo(vf2d posFrom,vf2d posTo){
	return geom2d::line<float>(posFrom,posTo).vector().polar().y;
}

float util::degToRad(float deg){
	return deg*(PI/180);
}

float util::radToDeg(float rad){
	return rad*57.2957795130823208767;
}

float util::lerp(float n1,float n2,double t){
	return n1*(1-t)+n2*t;
}

std::string util::timerStr(float time){
	int seconds=int(time);
	int hours=seconds/3600;
	int minutes=seconds/60;

	std::string timeStr="";
	if(hours>0){
		if(hours<10)timeStr+="0";
		timeStr+=std::to_string(hours)+":";
	}

	if(minutes%60<10)timeStr+="0";
	timeStr+=std::to_string(minutes%60)+":";

	if(seconds%60<10)timeStr+="0";
	timeStr+=std::to_string(seconds%60);

	return timeStr;
}

std::string util::WrapText(PixelGameEngine*pge,std::string str,int width,bool proportional,vd2d scale){
	std::string newStr;
	while (true) {
		std::string word;
		if (str.find(" ")==std::string::npos) {
			word=str;
		} else {
			word = str.substr(0,str.find(" "));
		}
		vi2d newSize = vd2d(proportional?pge->GetTextSizeProp(newStr+(newStr.size()>0?" ":"")+word):pge->GetTextSize(newStr+(newStr.size()>0?" ":"")+word))*scale;
		if (newSize.x>width) {
			newStr+="\n"+word;
		} else {
			newStr+=(newStr.size()>0?" ":"")+word;
		}
		if (str.find(" ")==std::string::npos) {
			break;
		} else {
			str.erase(0,str.find(" ")+1);
		}
	}
	return newStr;
}