#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include <FMOD/fmod.h>

#include "jeu.h"

void jouer(SDL_Surface *ecran, TTF_Font *police)
{
    SDL_Surface *texte = NULL, *texteClicks = NULL, *fond = NULL;
    SDL_Event eventJeu;
    SDL_Rect positionTemps, positionClicks, positionFond;
    TTF_Font *policeClicks;
    FSOUND_SAMPLE *sonClic = NULL, *sonFinJeu = NULL;
    FMUSIC_MODULE *fondMusique = NULL;

    char temps[20] = "", clicks[4] = "";
    int continuer = 1, tempsActuel = 0, tempsPrecedent = 0, compteur = MILLISECS_COMPTEUR, compteurClicks = 0, clicksActive = 0, sonFinJeuActive = 0, jouerMusique = 0;

    //--------------POLICES--------------
    police = TTF_OpenFont("journal.ttf", 45);
    policeClicks = TTF_OpenFont("journal.ttf", 70);

    SDL_Color couleurNoire = {0, 0, 0};
    SDL_Color couleurBlanche = {255, 255, 255};

    SDL_WM_SetCaption("Click'o'Mania - JOUE" , NULL);
    fond = IMG_Load("IMG/fondJeu.png");

    tempsActuel = SDL_GetTicks();
    sprintf(temps, "Temps : %d", compteur);
    texte = TTF_RenderText_Shaded(police, temps, couleurNoire, couleurBlanche);

    fondMusique = FMUSIC_LoadSong("MUSIC/jeu01.mid");

    if(fondMusique == NULL)
        continuer = 0;

    if(!jouerMusique)
    {
        FMUSIC_PlaySong(fondMusique);
        jouerMusique = 1;
    }

    sonClic = FSOUND_Sample_Load(FSOUND_FREE, "SFX/click.wav", 0, 0, 0);
    sonFinJeu = FSOUND_Sample_Load(FSOUND_FREE, "SFX/finJeuClickClassic.wav", 0, 0, 0);

    while(continuer)
    {
        SDL_PollEvent(&eventJeu);
        switch(eventJeu.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
                switch(eventJeu.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        continuer = 0;
                        break;
                }
                break;
            case SDL_MOUSEBUTTONDOWN:
                if(compteur > 0)
                    clicksActive = 1;
                break;
            case SDL_MOUSEBUTTONUP:
                if(clicksActive && compteur > 0)
                {
                    FSOUND_PlaySound(FSOUND_FREE, sonClic);
                    compteurClicks++;
                    clicksActive = 0;
                }
                break;
        }

        if(!jouerMusique)
        {
            FMUSIC_PlaySong(fondMusique);
            jouerMusique = 1;
        }
        else if(compteur <= 0)
            FMUSIC_StopSong(fondMusique);


        SDL_WM_SetCaption("Click'o'Mania - JOUE" , NULL);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

        tempsActuel = SDL_GetTicks();
        if(compteur > 0)
        {
            if(tempsActuel - tempsPrecedent >= 100)
            {
                compteur -= 100;
                sprintf(temps, "Plus que : %d millisecondes", compteur);
                SDL_FreeSurface(texte);
                texte = TTF_RenderText_Shaded(police, temps, couleurNoire, couleurBlanche);
                tempsPrecedent = tempsActuel;
            }
            else /* Si ça fait moins de 100ms depuis le dernier tour de boucle, on endort le programme le temps qu'il faut */
            {
                SDL_Delay(100 - (tempsActuel - tempsPrecedent));
            }
            sprintf(clicks, "Vous avez cliqué(e) [ %d ] fois !", compteurClicks);
            SDL_FreeSurface(texteClicks);
            texteClicks = TTF_RenderText_Shaded(police, clicks, couleurNoire, couleurBlanche);
        }
        else //Si c'est fini
        {
            sprintf(temps, "C'est finiii !");
            SDL_FreeSurface(texte);
            texte = TTF_RenderText_Shaded(police, temps, couleurNoire, couleurBlanche);
            sauverHighScores(compteurClicks);

            if(sonFinJeuActive == 0)
                sonFinJeuActive = 1;
            else if(sonFinJeuActive == 1)
            {
                FSOUND_PlaySound(FSOUND_FREE, sonFinJeu);
                sonFinJeuActive = 2;
            }

        }

        positionFond.x = ecran->w / 2 - fond->w / 2;
        positionFond.y = ecran->h / 2 - fond->h / 2;
        SDL_BlitSurface(fond, NULL, ecran, &positionFond); /* Blit du fond par-dessus */

        positionTemps.x = ecran->w / 2 - texte->w / 2;
        positionTemps.y = (ecran->h - ecran->h / 15)  - texte->h / 2;
        SDL_BlitSurface(texte, NULL, ecran, &positionTemps); /* Blit du texte contenant le temps */

        positionClicks.x = ecran->w / 2 - texteClicks->w / 2;
        positionClicks.y = ecran->h / 2 - texteClicks->h / 2;
        SDL_BlitSurface(texteClicks, NULL, ecran, &positionClicks); /* Blit du texte contenant les clicks */

        SDL_Flip(ecran);

    }

    //-----------RELACHEMENT DE LA MEMOIRE-----------
    FMUSIC_FreeSong(fondMusique);
    FSOUND_Sample_Free(sonFinJeu);
    FSOUND_Sample_Free(sonClic);
    SDL_FreeSurface(texte);
    SDL_FreeSurface(texteClicks);
    TTF_CloseFont(policeClicks);
    TTF_CloseFont(police);
}

void sauverHighScores(int clics)
{
    FILE* fichier = NULL;
    int score[5] = {0}; // Tableau des 5 meilleurs scores

    fichier = fopen("highscores.minishlink", "r+"); //On ouvre le fichier en mode lecture + écriture

    //Si l'ouverture a fonctionnée
    if (fichier != NULL)
    {
        //On prend les anciennes valeurs des HighScores
        fscanf(fichier, "%ld %ld %ld %ld %ld", &score[0], &score[1], &score[2],  &score[3],  &score[4]);

        if (clics > score[0])
        {
            //PREMIER !
            rewind(fichier);
            fprintf(fichier, "%d %d %d %d %d", clics, score[0], score[1], score[2], score[3]); //Enregistrement des HighScores
        }
        else if (clics > score[1] && clics < score[0])
        {
            //DEUXIEME !
            rewind(fichier);
            fprintf(fichier, "%d %d %d %d %d", score[0], clics, score[1], score[2], score[3]); //Enregistrement des HighScores
        }
        else if (clics > score[2] && clics < score[1])
        {
            //TROSIEME !
            rewind(fichier);
            fprintf(fichier, "%d %d %d %d %d", score[0], score[1], clics, score[2], score[3]); //Enregistrement des HighScores
        }
        else if (clics > score[3] && clics < score[2])
        {
            //QUATRIEME !
            rewind(fichier);
            fprintf(fichier, "%d %d %d %d %d", score[0], score[1], score[2], clics, score[3]); //Enregistrement des HighScores
        }
        else if (clics < score[3])
        {
            //CINQUIEME !
            rewind(fichier);
            fprintf(fichier, "%d %d %d %d %d", score[0], score[1], score[2], score[3], clics); //Enregistrement des HighScores
        }

        fclose(fichier); //On ferme le fichier
    }
    //Si l'ouverture n'a pas fonctionnée
    else
    {
        // On affiche un message d'erreur
        fprintf(stderr, "Erreur Fichier: Ouverture du fichier échouée lors de la sauvegarde des HighScores");
    }
}


