#include "writer.h"

// Constructor
Writer::Writer(std::shared_ptr<Text> text)
	: text_(text)
{
	// Inicializa variables
	posX_ = 0;
	posY_ = 0;
	kerning_ = 0;
	caption_ = "";
	speed_ = 0;
	writingCounter_ = 0;
	index_ = 0;
	lenght_ = 0;
	completed_ = false;
	enabled_ = false;
	enabledCounter_ = 0;
	finished_ = false;
}

// Actualiza el objeto
void Writer::update()
{
	if (enabled_)
	{
		if (!completed_)
		{
			// No completado
			if (writingCounter_ > 0)
			{
				writingCounter_--;
			}

			else if (writingCounter_ == 0)
			{
				index_++;
				writingCounter_ = speed_;
			}

			if (index_ == lenght_)
			{
				completed_ = true;
			}
		}

		else
		{
			// Completado
			if (enabledCounter_ > 0)
			{
				enabledCounter_--;
			}
			else if (enabledCounter_ == 0)
			{
				finished_ = true;
			}
		}
	}
}

// Dibuja el objeto en pantalla
void Writer::render() const
{
	if (enabled_)
	{
		text_->write(posX_, posY_, caption_, kerning_, index_);
	}
}

// Establece el valor de la variable
void Writer::setPosX(int value)
{
	posX_ = value;
}

// Establece el valor de la variable
void Writer::setPosY(int value)
{
	posY_ = value;
}

// Establece el valor de la variable
void Writer::setKerning(int value)
{
	kerning_ = value;
}

// Establece el valor de la variable
void Writer::setCaption(std::string text)
{
	caption_ = text;
	lenght_ = text.length();
}

// Establece el valor de la variable
void Writer::setSpeed(int value)
{
	speed_ = value;
	writingCounter_ = value;
}

// Establece el valor de la variable
void Writer::setEnabled(bool value)
{
	enabled_ = value;
}

// Obtiene el valor de la variable
bool Writer::IsEnabled() const
{
	return enabled_;
}

// Establece el valor de la variable
void Writer::setFinishedCounter(int time)
{
	enabledCounter_ = time;
}

// Centra la cadena de texto a un punto X
void Writer::center(int x)
{
	setPosX(x - (text_->lenght(caption_, kerning_) / 2));
}

// Obtiene el valor de la variable
bool Writer::hasFinished() const
{
	return finished_;
}