#pragma once

#include <SDL2/SDL.h>
#include "utils.h"

#ifndef SCREEN_H
#define SCREEN_H

struct anchor_t
{
	int left;	// Parte izquierda de la pantalla de juego
	int right;	// Parte drecha de la pantalla de juego
	int center; // Parte central horizontal de la pantalla de juego
	int top;	// Parte superior de la pantalla de juego
	int bottom; // Parte infoerior de la pantalla de juego
	int middle; // Parte central vertical de la pantalla de juego
};

// Clase Screen
class Screen
{
private:
	SDL_Window *window;		 // Ventana de la aplicación
	SDL_Renderer *renderer;	 // El renderizador de la ventana
	SDL_Texture *gameCanvas; // Textura para completar la ventana de juego hasta la pantalla completa
	options_t *options;		 // Variable con todas las opciones del programa

	int screenWidth;	  // Ancho de la pantalla o ventana
	int screenHeight;	  // Alto de la pantalla o ventana
	int gameCanvasWidth;  // Resolución interna del juego. Es el ancho de la textura donde se dibuja el juego
	int gameCanvasHeight; // Resolución interna del juego. Es el alto de la textura donde se dibuja el juego
	anchor_t anchor;	  // Variable con los anclajes de la pantalla
	SDL_Rect dest;		  // Coordenadas donde se va a dibujar la textura del juego sobre la pantalla o ventana
	color_t borderColor;  // Color del borde añadido a la textura de juego para rellenar la pantalla

public:
	// Constructor
	Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options, int gameInternalResX, int gameInternalResY);

	// Destructor
	~Screen();

	// Limpia la pantalla
	void clean(color_t color = {0x00, 0x00, 0x00});

	// Prepara para empezar a dibujar en la textura de juego
	void start();

	// Vuelca el contenido del renderizador en pantalla
	void blit();

	// Establece el modo de video
	void setVideoMode(int fullScreenMode);

	// Camibia entre pantalla completa y ventana
	void switchVideoMode();

	// Cambia el tamaño de la ventana
	void setWindowSize(int size);

	// Cambia el color del borde
	void setBorderColor(color_t color);

	// Cambia el tipo de mezcla
	void setBlendMode(SDL_BlendMode blendMode);
};

#endif
