#include "font.h"

namespace ngObjects
{ 
	Font::Font(std::string fontFilePath, int s, float d, bool extdFnt, GLfloat r, GLfloat g, GLfloat b)
	{
		fontData = new FTGLExtrdFont(fontFilePath.c_str());

		// Don't know why I get unresolved external on this.. fix it later
		/*if (fontData->Error())
		{
			std::cerr << "FTGL: Failed to load font " << fontFilePath << std::endl;
			exit(1);
		}*/

		setSize(s, d);
		setColor(r, g, b);
		
	}

	void Font::open(std::string fontFilePath, int s, float d, bool extdFnt, GLfloat r, GLfloat g, GLfloat b)
	{
		fontData = new FTGLExtrdFont(fontFilePath.c_str());

		// Don't know why I get unresolved external on this.. fix it later
		/*if (fontData->Error())
		{
			std::cerr << "FTGL: Failed to load font " << fontFilePath << std::endl;
			exit(1);
		}*/
		fontOpen = true;

		setSize(s, d);
		setColor(r, g, b);
	}

	void Font::setSize(int s, float d)
	{
		if (!fontData->FaceSize(s))
		{
			std::cerr << "FTGL: Failed to set FontSize" << std::endl;
			exit(1);
		}

		fontData->Depth(d);
		fontData->CharMap(ft_encoding_unicode);
	}

	void Font::setColor(GLfloat r, GLfloat g, GLfloat b)
	{
		material.ambient[0] = r;
		material.ambient[1] = g;
		material.ambient[2] = b;
		material.ambient[3] = 1.0f;
		if (r == 0.0 && b == 0.0 && g == 0.0)
			{ r = 1.0; g = 1.0; b = 1.0; } // OpenGL Lighting fix
		material.diffuse[0] = r;
		material.diffuse[1] = g;
		material.diffuse[2] = b;
		material.diffuse[3] = 1.0f;
		material.shininess = 0.0f;
		material.specular[0] = 0.0f;
		material.specular[1] = 0.0f;
		material.specular[2] = 0.0f;
		material.specular[3] = 1.0f;
	}

	void Font::render(std::string s)
	{ 
		glMaterialfv(GL_FRONT, GL_AMBIENT, material.ambient);
		glMaterialfv(GL_FRONT, GL_DIFFUSE, material.diffuse);
		glMaterialfv(GL_FRONT, GL_SPECULAR, material.specular);
		glMaterialf(GL_FRONT, GL_SHININESS, material.shininess);
		fontData->Render(s.c_str());
	}
}
