#pragma once

#include <SDL2/SDL.h>
#include "sprite.h"
#include "text.h"

#ifndef WRITER_H
#define WRITER_H

// Clase Writer. Pinta texto en pantalla letra a letra a partir de una cadena y un bitmap
class Writer
{
private:
	// Objetos y punteros
	Text *text; // Objeto encargado de escribir el texto

	// Variables
	int posX;			 // Posicion en el eje X donde empezar a escribir el texto
	int posY;			 // Posicion en el eje Y donde empezar a escribir el texto
	int kerning;		 // Kerning del texto, es decir, espaciado entre caracteres
	std::string caption; // El texto para escribir
	int speed;			 // Velocidad de escritura
	int writingCounter;	 // Temporizador de escritura para cada caracter
	int index;			 // Posición del texto que se está escribiendo
	int lenght;			 // Longitud de la cadena a escribir
	bool completed;		 // Indica si se ha escrito todo el texto
	bool enabled;		 // Indica si el objeto está habilitado
	int enabledCounter;	 // Temporizador para deshabilitar el objeto
	bool finished;		 // Indica si ya ha terminado

public:
	// Constructor
	Writer(Text *text);

	// Actualiza el objeto
	void update();

	// Dibuja el objeto en pantalla
	void render();

	// Establece el valor de la variable
	void setPosX(int value);

	// Establece el valor de la variable
	void setPosY(int value);

	// Establece el valor de la variable
	void setKerning(int value);

	// Establece el valor de la variable
	void setCaption(std::string text);

	// Establece el valor de la variable
	void setSpeed(int value);

	// Establece el valor de la variable
	void setEnabled(bool value);

	// Obtiene el valor de la variable
	bool IsEnabled();

	// Establece el valor de la variable
	void setEnabledCounter(int time);

	// Obtiene el valor de la variable
	int getEnabledCounter();

	// Centra la cadena de texto a un punto X
	void center(int x);

	// Obtiene el valor de la variable
	bool hasFinished();
};

#endif
