#pragma once

#include <SDL2/SDL.h>
#include "common/asset.h"
#include "common/input.h"
#include "common/jail_audio.h"
#include "common/screen.h"
#include "common/smartsprite.h"
#include "common/utils.h"
#include "common/writer.h"
#include "const.h"
#include <vector>

#ifndef INTRO_H
#define INTRO_H

// Clase Intro
class Intro
{
private:
	// Objetos y punteros
	SDL_Renderer *renderer;				// El renderizador de la ventana
	Screen *screen;						// Objeto encargado de dibujar en pantalla
	Texture *texture;					// Textura con los graficos
	SDL_Event *eventHandler;			// Manejador de eventos
	Asset *asset;						// Objeto que gestiona todos los ficheros de recursos
	Lang *lang;							// Objeto para gestionar los textos en diferentes idiomas
	Input *input;						// Objeto pata gestionar la entrada
	std::vector<SmartSprite *> bitmaps; // Vector con los sprites inteligentes para los dibujos de la intro
	std::vector<Writer *> texts;		// Textos de la intro
	Text *text;							// Textos de la intro
	section_t *section;					// Estado del bucle principal para saber si continua o se sale

	// 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();

	// Carga los recursos
	bool loadMedia();

	// Comprueba los eventos
	void checkEvents();

	// Comprueba las entradas
	void checkInput();

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

public:
	// Constructor
	Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Lang *lang, section_t *section);

	// Destructor
	~Intro();

	// Bucle principal
	void run();
};

#endif
