#pragma once

#include <SDL2/SDL_stdinc.h> // Para Uint32
#include <memory>			 // Para unique_ptr, shared_ptr
#include <vector>			 // Para vector
#include "smart_sprite.h"	 // Para SmartSprite
#include "writer.h"			 // Para Writer
class Text;					 // lines 8-8
class Texture;				 // lines 9-9

/*
	Esta clase gestiona un estado del programa. Se encarga de mostrar la secuencia
	de introducción
*/

// Clase Intro
class Intro
{
private:
	// Objetos
	std::shared_ptr<Texture> texture_; // Textura con los graficos
	std::shared_ptr<Text> text_;	   // Textos de la intro

	std::vector<std::unique_ptr<SmartSprite>> bitmaps_; // Vector con los sprites inteligentes para los dibujos de la intro
	std::vector<std::unique_ptr<Writer>> texts_;		// Textos de la intro

	// Variables
	Uint32 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa
	int scene_ = 1;	   // Indica que escena está activa

	// Actualiza las variables del objeto
	void update();

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

	// Comprueba los eventos
	void checkEvents();

	// Comprueba las entradas
	void checkInput();

	// Actualiza las escenas de la intro
	void updateScenes();

	// Recarga todas las texturas
	void reloadTextures();

public:
	// Constructor
	Intro();

	// Destructor
	~Intro() = default;

	// Bucle principal
	void run();
};
