#pragma once

#include <SDL2/SDL.h>
#include "jail_audio.h"
#include "sprite.h"
#include "text.h"
#include "texture.h"
#include "utils.h"
#include <vector>

#ifndef NOTIFY_H
#define NOTIFY_H

class Notify
{
private:
	enum notification_state_e
	{
		ns_rising,
		ns_stay,
		ns_vanishing,
		ns_finished
	};

	enum notification_position_e
	{
		upperLeft,
		upperCenter,
		upperRight,
		middleLeft,
		middleRight,
		bottomLeft,
		bottomCenter,
		bottomRight
	};

	struct notification_t
	{
		string text1;
		string text2;
		int counter;
		notification_state_e state;
		notification_position_e position;
		Texture *texture;
		Sprite *sprite;
		SDL_Rect rect;
		int y;
		int travelDist;
	};

	// Objetos y punteros
	SDL_Renderer *renderer; // El renderizador de la ventana
	Texture *iconTexture;	// Textura para los iconos de las notificaciones
	Text *text;				// Objeto para dibujar texto
	options_t *options;		// Variable con todas las opciones del programa

	// Variables
	color_t bgColor;					  // Color de fondo de las notificaciones
	int waitTime;						  // Tiempo que se ve la notificación
	vector<notification_t> notifications; // La lista de notificaciones activas
	JA_Sound_t *sound;					  // Sonido a reproducir cuando suena la notificación

	// Elimina las notificaciones finalizadas
	void clearFinishedNotifications();

public:
	// Dibuja las notificaciones por pantalla
	void render();

	// Actualiza el estado de las notificaiones
	void update();

	// Constructor
	Notify(SDL_Renderer *renderer, string iconFile, string bitmapFile, string textFile, string soundFile, options_t *options);

	// Destructor
	~Notify();

	// Muestra una notificación de texto por pantalla;
	void showText(string text1 = "", string text2 = "", int icon = -1);

	// Indica si hay notificaciones activas
	bool active();
};

#endif
