#include <stdio.h>
#include <string.h> // contient la déclaration de la fonction strlen(), strcpy() et strcat()
#include <stdbool.h> //nécessite la compilation avec l'option -std=c99

// longueur maximale du verbe
#define LMAX 26



int main()
{
	char verbe [LMAX + 2];  // LMAX caractères + '\n' + '\0' 
							// pour pouvoir détecter quand l'utilisateur essaie de saisir un verbe trop long
	size_t lo ;
	bool espace_present = false;
	size_t i = 0;
	
	// le tableau pronoms est un tableau de caractères à 2 dimensions : il contient 6x5 éléments de type caractère
	// on peut le voir comme une matrice ( 6 lignes, 5 colonnes )
	// il est constitué de 6 tableaux à 1 dimension contenant chacun 5 éléments : 
	//		- le tableau pronoms [0] qui contient les éléments pronoms [0][0]='j', pronoms [0][1]='e',... pronoms [0][4], 
	//		- le tableau pronoms [1] qui contient les éléments pronoms [1][0], pronoms [1][1],... pronoms [1][4], 
	//		- ...
	//		- le tableau pronoms [5] qui contient les éléments pronoms [5][0]='i', pronoms [5][1]='l',... pronoms [5][4], 
	// type de l'expression pronoms[i][j] : char
	// type de l'expression pronoms[i] : tableau de caractères, c'est à dire char * const
	// valeur de l'expression pronoms [i] : &pronoms[i][0]
	char pronoms [6][5] = {	{'j','e','\0'},{'t','u','\0'},{'i','l','\0'},
							{'n','o','u','s','\0'},{'v','o','u','s','\0'},{'i','l','s','\0'}};
	
	
	// terminaisons est un tableau qui contient 6 éléments de type const char *
	// il contient donc 6 adresses de caractère constant.
	// par exemple, terminaisons[3] contient l'adresse du premier caractère de la chaine "ons"
	const char *terminaisons[] = {
		"e",
		"es",
		"e",
		"ons",
		"ez",
		"ent"
	}; 
	
	// pour stoker les lignes comme "nous chantons"
	char ligne [LMAX + 7]; // 4(longueur max d'un pronom)  + 1(espace ) + LMAX - 2 (longueur max du verbe sans "er") + 3(longueur max d'une terminaison) + 1('\0')
	
	printf("--> Saisir un verbe du premier groupe (longueur max %d) :\n", LMAX);
	
	// dans cet exercice, on choisit d'utiliser fgets ce qui permet de détecter si l'utilisateur saisit des espaces
	fgets(verbe, LMAX + 2, stdin);
	
	
	lo = strlen(verbe);
	if (verbe[lo -1] != '\n') //avant d'appuyer sur Entree, l'utilisateur a saisi un nombre de caractère supérieur ou égal à LMAX+1
	{
		// l'utilisateur a essayé de saisir un verbe trop long
		printf("Le verbe saisi est trop long, au revoir !\n");
		return 1;
		// >>>>>>>>>>>> FIN DU PROGRAMME >>>>>>>>>>>>>>
	}
	// on est certain qu'il y a un '\n' à la fin de la chaine verbe --> on le supprime
	verbe[lo -1] = '\0';
	--lo;
	
	// détection des éventuels espaces
	while (!espace_present && i < lo)
	{
		espace_present = verbe[i] == ' ';
		++i;
	}
	if (espace_present)
	{
		printf("Le verbe saisi contient au moins un espace, au revoir !\n");
		return 2;
		// >>>>>>>>>>>> FIN DU PROGRAMME >>>>>>>>>>>>>>
	}
	
	if (lo <= 2 || verbe[lo-1] != 'r' || verbe[lo-2] != 'e')
	{
		printf("Le verbe saisi est soit trop court, soit n'est pas du premier groupe. Au revoir !\n");
		return 2;
		// >>>>>>>>>>>> FIN DU PROGRAMME >>>>>>>>>>>>>>
	}
	
	printf("\nConjugaison du verbe %s :\n",verbe);
	
	// suppression de la chaine "er" à la fin de verbe
	verbe[lo-2] = '\0'; 
	

	for (i = 0; i < 6; ++i)
	{
		strcpy(ligne, pronoms[i]);
		strcat(ligne, " ");
		strcat(ligne, verbe);
		strcat(ligne, terminaisons[i]);
		printf("%s\n", ligne);
	}
	printf("\n");
	return 0;
}


