#include "main.h"

int main(int argc, char ** argv)
{
	int quit = false;                                               //S'exécute tant quand qu'on ne quitte pas
	int test;                                                       //variable test pour entrer en mode partie
	int tab[200];                                                   //tableau pour initialiser le niveau
	int score=0;
    char quoifaire;                                                 //Variable pour déterminer quoi faire à la fin de la partie
    char pseudo[20]="";                                             //chaine de caractere pour sauvegarder les scores

    //Déclaration de toutes les coordonnées
	int x=500, y=300;                                                 //pingouin
	int xs, ys;                                                 //sceau
	int ymax=600, ymin=0, xmax=1000, xmin=0;                        //coordonnées limites du personnage
	int y_rand_max=6, y_rand_min=0, x_rand_max=10, x_rand_min=0;    //coordonnées limites pour le sceau (avec *100)

    SDL_Window *window = NULL;                                      //initialisation de la fenetre
	SDL_Renderer *renderer = NULL;                                  //initialisation du renderer
	SDL_Event event;                                                //initialisation de l'event
	clock_t temps;                                                  //variable temps pour le temps final

    //DEBUT DU PROGRAMME

	recupere_niveau(&tab);
	afficher_menu(&window, &renderer);

	while (quit != true)
    {

    SDL_PollEvent(&event);                                         //Le programme attend un évènement spécifique

    switch(event.type)
    {
            case SDL_QUIT:
                quit = true;
            break;

            case SDL_KEYDOWN:                                      //S'executera si la touche est enfoncée
                switch(event.key.keysym.scancode)
                {
                case SDL_SCANCODE_KP_1:                            //Lance la partie si appuie sur 1
                    afficher_case(&tab, &window, &renderer);
                    afficher_pingouin(&window, &renderer, &x, &y);

                    aleatoire(&xs, &x_rand_min, &x_rand_max);
                    xs=xs*100;

                    aleatoire(&ys, &y_rand_min, &y_rand_max);
                    ys=ys*100;

                    afficher_sceau(&window, &renderer, &xs, &ys);
                    test = true;                                   //Est vrai pour indiquer le début de la partie
                    break;

                case SDL_SCANCODE_KP_2:
                    recupere_score();
                break;

                case SDL_SCANCODE_KP_3:
                    afficher_credits(&window, &renderer);
                break;

                 case SDL_SCANCODE_KP_4:
                    quit = true;
                break;
                }
    }

        if (test == true)
        {                                         //Si l'on a appuyé sur "1" pour lancé la partie
                SDL_PollEvent(&event);

                switch(event.type)
                {
                    case SDL_QUIT:
                        quit = true;
                    break;

                    case SDL_KEYDOWN:
                        switch(event.key.keysym.scancode)
                        {
                        case SDL_SCANCODE_UP:                                    //Si l'on appuie sur la flèche vers le haut,
                            y=y-100;                                             //déplace le personnage vers le haut
                            afficher_case(&tab, &window, &renderer);
                            afficher_sceau(&window, &renderer, &xs, &ys);
                            afficher_pingouin(&window, &renderer, &x, &y);
                        break;

                        case SDL_SCANCODE_DOWN:                                //Vers le bas
                            y=y+100;
                            afficher_case(&tab, &window, &renderer);
                            afficher_pingouin(&window, &renderer, &x, &y);
                            afficher_sceau(&window, &renderer, &xs, &ys);
                        break;

                        case SDL_SCANCODE_LEFT:                               //Vers le gauche
                            x=x-100;
                            afficher_case(&tab, &window, &renderer);
                            afficher_pingouin(&window, &renderer, &x, &y);
                            afficher_sceau(&window, &renderer, &xs, &ys);
                        break;

                        case SDL_SCANCODE_RIGHT:                              //Vers la droite
                            x=x+100;
                            afficher_case(&tab, &window, &renderer);
                            afficher_pingouin(&window, &renderer, &x, &y);
                            afficher_sceau(&window, &renderer, &xs, &ys);
                        break;

                        case SDL_SCANCODE_ESCAPE:
                            quit = true;
                        break;
                        }
                    break;
                }

                //Conditions pour éviter au personnage de sortir de la fenêtre

                if(x>=xmax)
                {
                    x=xmax;
                    afficher_pingouin(&window, &renderer, &x, &y);
                }

                if(x<=xmin)
                {
                    x=xmin;
                    afficher_pingouin(&window, &renderer, &x, &y);
                }

                if(y>=ymax)
                {
                    y=ymax;
                    afficher_pingouin(&window, &renderer, &x, &y);
                }

                if(y<=ymin)
                {
                    y=ymin;
                    afficher_pingouin(&window, &renderer, &x, &y);
                }

                //Condition pour collecter un item et le faire réapparaitre

                if(x==xs && y==ys)
                {
                    score ++;

                    aleatoire(&xs, &x_rand_min, &x_rand_max);
                    xs=xs*100;

                    aleatoire(&ys, &y_rand_min, &y_rand_max);
                    ys=ys*100;

                    afficher_sceau(&window, &renderer, &xs, &ys);
                }

                //Si le nombre d'item est atteint, met fin à la partie

                if(score == 10)
                {
                    temps=clock();
                    SDL_DestroyWindow(window);
                    SDL_DestroyRenderer(renderer);
                    printf("Bravo !\nTu as mis %f secondes pour recuperer les poissons.\n1-Sauvegarder le score et "
                           "quitter\n2-Quitter sans sauvegarder\n",
                           (double) temps/CLOCKS_PER_SEC);
                    scanf("%c", &quoifaire);
                }

                if(quoifaire == '1')
                {
                        printf("Entrez votre pseudo :\n");
                        scanf("%s", &pseudo);
                        double temps2 = temps;                 //Conversion du temps en type double pour faciliter l'affichage
                        temps2=temps2/1000;                    //Conversion en secondes

                        time_t secondes;
                        struct tm moment;
                        time(&secondes);
                        moment=*localtime(&secondes);

                        FILE* fichier = NULL;
                        fichier = fopen("save.txt", "a");
                        if (fichier != NULL)
                        {
                             fprintf(fichier, "%s a etabli un temps de %f s le 0%d/0%d a %d heure(s) %d minute(s) et %d s.\n", pseudo,
                                      temps2, moment.tm_mday+1, moment.tm_mon+1, moment.tm_hour, moment.tm_min, moment.tm_sec);
                             fclose(fichier);
                        }
                        quit = true;
                    }

                    if (quoifaire == '2')
                    {
                        quit = true;
                    }

        }



    }
}
