#pragma once

#include <SDL2/SDL_events.h> // for SDL_Event
#include <SDL2/SDL_stdinc.h> // for Uint32, Uint8
#include <vector>			 // for vector
#include <memory>
#include "smart_sprite.h"
#include "texture.h"
#include "text.h"
#include "writer.h"
struct JA_Music_t;

/*
	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;	   // Contador de ticks para ajustar la velocidad del programa
	Uint8 ticksSpeed;  // Velocidad a la que se repiten los bucles del programa
	JA_Music_t *music; // Musica para la intro
	int scene;		   // 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(JA_Music_t *music);

	// Destructor
	~Intro() = default;

	// Bucle principal
	void run();
};
