#include "utils.h"
#include <graph.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "graph_sup.h"

#define FPS 2.0

/*La liste des bouttons et leur nombre*/
button* Buttons;
int BT_Count = 0;

/*Des variables afin de faciliter le calcul du temps entre chaque image pour int DrawNextFrame().*/
double delta = (1/FPS)*1000000;
unsigned long suivant = (1/FPS)*1000000;

/*Un set de fonction permettant de facilement mettre en place des boutons, pouvoir les manipuler et les supprimer
  Ces fonctions utilisent la structure struct Button.*/
void ClearButtons() {
	BT_Count = 0;
	Buttons = (button*)realloc(Buttons, sizeof(button) * 1);
}

void AddButton(int x, int y, int w, int h, int id) {
	button BT = {x, y, w, h, id};
	BT_Count++;
	Buttons = (button*) realloc(Buttons, (BT_Count+1) * sizeof(button));
	Buttons[BT_Count-1] = BT;
}

int GetButton(int x, int y) {
	for (int ID = 0; ID < BT_Count; ID++) {
		button BT = Buttons[ID];
		if (x >= BT.x && y >= BT.y && x <= BT.x + BT.w && y <= BT.y + BT.h) {
			return BT.id;
		}
	}
	return -1;
}

/*Des fonctions appelant celles de la bibliothèque graphique afin de réduire la longueur des noms..*/
couleur GetColorN(char* name) {
	return CouleurParNom(name);
}

couleur GetColor(unsigned char r, unsigned char g, unsigned char b) {
	return CouleurParComposante(r, g, b);
}

void SetColor(unsigned char r, unsigned char g, unsigned char b) {
	ChoisirCouleurDessin(CouleurParComposante(r, g, b));
}

void SetColorC(couleur Color) {
	ChoisirCouleurDessin(Color);
}

void SetColorN(char* name) {
	ChoisirCouleurDessin(CouleurParNom(name));
}

/*Permet de faire tourner la partie graphique à X images par secondes définit par la constante FPS.*/
int DrawNextFrame() {
	if (Microsecondes() >= suivant) {
		suivant = Microsecondes() + delta;
		return 1;
	}

	return 0;
}