# include <stdio.h>
# include <stdlib.h>
# include <graph.h>


void affiche_boutons_joueurs(void) {
	/* Initialise le graphique et le ferme SEULEMENT si l'utilisateur ferme la 
	fenêtre ou appuie sur QUITTER */
	couleur c;
	c = CouleurParNom("white");
	EffacerEcran(c);
	c = CouleurParNom("black");
	ChoisirCouleurDessin(c);
	DessinerRectangle(150,300,200,50);
	DessinerRectangle(150,360,200,50);
	DessinerRectangle(150,420,200,50);
	c = CouleurParComposante(0, 129, 60);
	ChoisirCouleurDessin(c);
	EcrireTexte(188,457, "QUITTER", 2);
	c = CouleurParNom("dark blue");
	ChoisirCouleurDessin(c);
	EcrireTexte(233,337, "1J", 2);
	EcrireTexte(233,397, "2J", 2);

}


void affiche_boutons(void) {
	/* Initialise le graphique et le ferme SEULEMENT si l'utilisateur ferme la 
	fenêtre ou appuie sur QUITTER */
	couleur c;
	c = CouleurParNom("white");
	EffacerEcran(c);
	c = CouleurParNom("black");
	ChoisirCouleurDessin(c);
	DessinerRectangle(150,300,200,50);
	DessinerRectangle(150,375,200,50);
	c = CouleurParComposante(0, 129, 60);
	ChoisirCouleurDessin(c);
	EcrireTexte(188,412, "QUITTER", 2);
	c = CouleurParNom("dark blue");
	ChoisirCouleurDessin(c);
	EcrireTexte(200,337, "JOUER", 2);
}


int souris_clique_bouton(int bouton_x, int bouton_y, int largeur, int hauteur) {
	/* Prend en argument les coordonnées x et y du point en haut
	à gauche du bouton, sa largeur et sa hauteur puis renvoie un booléen si 
	la souris clique dans la zone du bouton (0 si oui, 1 sinon) */
	int hitbox_largeur[500];
	int hitbox_hauteur[500];
	int i;
	int j;
	SourisCliquee();

	/* Remplit le tableau hitbox_largeur avec toutes les coordonnées x qui correspondent
	à celles du bouton */
	for (i = 0; i != largeur; i++) {
		hitbox_largeur[i] = i + bouton_x;
	}

	/* Remplit le tableau hitbox_hauteur avec toutes les coordonnées y qui correspondent
	à celles du bouton */
	for (i = 0; i != hauteur; i++) {
		hitbox_hauteur[i] = i + bouton_y;
	}

	/* Vérifie si les coordonnées de la souris sont présentes dans les tableaux
	qui définissent la hitbox du bouton */
	for (i = 0; i != largeur; i++) {
		for (j = 0; j != hauteur; j++) {
			if ((hitbox_largeur[i] == _X) && (hitbox_hauteur[j] == _Y)) {
				return 1;
			}
		}
	}
	return 0;
}

void previsualisation_grille(int taille_grille) {
	int i;
	int j;
	int cote_par_carre = (102/taille_grille);
	for (i = 0; i != taille_grille; i++) {
		for (j = 0; j != taille_grille; j++) {
			ChoisirCouleurDessin(CouleurParNom("black"));
			DessinerRectangle(194 + (cote_par_carre*i), 40 + (cote_par_carre*j), cote_par_carre, cote_par_carre);
		}
	}
}

void affiche_selection_taille_grille(int taille_grille) {
	couleur c;
	char nouv_taille_grille[20];
	sprintf(nouv_taille_grille, "%d", taille_grille);
	c = CouleurParNom("black");
	ChoisirCouleurDessin(c);
	EcrireTexte(117,200,"Taille de la grille : ", 2);
	EcrireTexte(367,200,nouv_taille_grille, 2);
	DessinerSegment(124,250,376,250);
	DessinerSegment(125,251,375,251);
	DessinerSegment(125,249,375,249);
	DessinerArc(114+(42*(taille_grille-3)),240,20,20,0,360);
	DessinerArc(113+(42*(taille_grille-3)),239,22,22,0,360);
	c = CouleurParNom("grey");
	ChoisirCouleurDessin(c);
	RemplirArc(114+(42*(taille_grille-3)),240,20,20,0,360);
}

void affiche_fleches(void) {
	ChoisirCouleurDessin(CouleurParNom("black"));
	/* Flèche gauche */
	DessinerSegment(105,242, 105,257);
	DessinerSegment(105,242, 97, 250);
	DessinerSegment(97, 250, 105,257);
	/* Flèche droite */
	DessinerSegment(400,242, 400,257);
	DessinerSegment(400,242, 408,250);
	DessinerSegment(408,250, 400,257);
}

int main(void) {
	int test = 1;
	int bouton_taille_x = 114;
	int taille_grille = 3;
	int sous_menu = 0;
	InitialiserGraphique();
	CreerFenetre(100,100,500,500);
	affiche_boutons();
	affiche_selection_taille_grille(taille_grille);
	previsualisation_grille(taille_grille);
	affiche_fleches();
	while (1) {
		if (sous_menu) { 
			if (souris_clique_bouton(150,420,200,50)) {
				affiche_boutons();
				affiche_selection_taille_grille(taille_grille);
				affiche_fleches();
				previsualisation_grille(taille_grille);
				sous_menu = 0;
			}
			else if (souris_clique_bouton(150,300,200,50)) {
				/* Lance le code d'une partie à 1 joueur */
			}
			else if (souris_clique_bouton(150,360,200,50)) {
				/* Lance le code d'une partie à 2 joueurs */
			}
		}
		else if (!sous_menu && souris_clique_bouton(150,300,200,50)) {
			sous_menu = 1;
			affiche_boutons_joueurs();
			affiche_selection_taille_grille(taille_grille);
			affiche_fleches();
			previsualisation_grille(taille_grille);
		}
		else if (!sous_menu && SourisCliquee() && souris_clique_bouton(150,375,200,50)) {
				FermerGraphique();
				return EXIT_SUCCESS;
		}
		
		if (ToucheEnAttente()) {
			int touche = (Touche());
			if (touche == XK_Left && taille_grille > 3) {
				taille_grille--;
				if (sous_menu) {
					affiche_boutons_joueurs();
				}
				else {
					affiche_boutons();
				}
				affiche_selection_taille_grille(taille_grille);
				previsualisation_grille(taille_grille);
				affiche_fleches();
			}
			if (touche == XK_Right && taille_grille < 9) {
				taille_grille++;
				if (sous_menu) {
					affiche_boutons_joueurs();
				}
				else {
					affiche_boutons();
				}
				affiche_selection_taille_grille(taille_grille);
				previsualisation_grille(taille_grille);
				affiche_fleches();
			}
		}
	} 
}