/*


    Evolute version 0.7
    Copyright (C) 2010 Antti Vainio

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.


*/

//          stats.cpp

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "global.hpp"
#include "levelit.hpp"

//statsit
void stats(bool hiscoret) {
     //Varmistetaan, että musiikkia ei enää soiteta
     Mix_HaltMusic();
     
     float suurinexpa = vahinkoexpa;
     if(tarkkuusexpa > suurinexpa) suurinexpa = tarkkuusexpa;
     if(nopeusexpa > suurinexpa) suurinexpa = nopeusexpa;
     if(hakeutuvuusexpa > suurinexpa) suurinexpa = hakeutuvuusexpa;
     
     bool pois1 = false; //aloita poistuminen
     bool pois2 = false; //ulos loopista!
     float kasautuminen = 0;
     float kasautuminen2 = -25; //tekstikasautuminen
     short int palkkikasautumisnopeus = int((suurinexpa * levuraja[4]) / (120 * suurinexpa + 40 * levuraja[4]));
     float palkkikasautuminen = -40 * palkkikasautumisnopeus;
     float palkkikasautuminenmax = levuraja[4];
     if(suurinexpa > levuraja[4]) palkkikasautuminenmax = suurinexpa;
     float mpkasautuminen = 0; //masterpiece
     bool mppois = true;
     short int valinta = 0;
     short int prewvalinta = 0;
     bool vapautanapit = true; //napit ei toimi ennen kuin niitä ei paineta
     bool uusihiscore = false;
     
     if(hiscoret) {
                  if(!avaahiscore()) { //tiedostoa ei voinut avata
                                 luouusihiscoref(); //tehdään uusi
                                 avaahiscore(); //avataan uudelleen
                  }
                  if(tiedosto != NULL) {
                                 for(int i=0;i<20;i++) fgets(tiedostorivi, 20, tiedosto); //kelataan
                                 if(pisteet > atoi(tiedostorivi)) uusihiscore = true; //teit uuden ennätyksen!
                                 fclose(tiedosto);
                  }
     }
     
     //piirretään raamit masterpiecelle
     piirtokohta = temptausta;
     piirrakuva2(tausta, 0, 0);
     piirrakuva2(taustaframe, 0, 0);
     piirtokohta = ruutu;
     
     bool onstage = false;
     for(int i=1;i<=10;i++) {
             char test[20];
             sprintf(test, "Stage%i", i);
             if(strcmp(test, nykyinenkartta) == 0) onstage = true;
     }
     
     if(!hiscoret) {
                   if(onstage) menuvalinta = 107;
                   else menuvalinta = -1;
     }
     else if(uusihiscore) menuvalinta = 103;
     else menuvalinta = 104;
     
     while(!pois2) {
                 alkuaika = SDL_GetTicks();
                 
                 //hiiri ja nappulat
                 SDL_GetMouseState(&hiirix,&hiiriy);
                 pelaajaninputit = SDL_GetKeyState(NULL);
                 if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1)) hiiriekanappi = true;
                 else hiiriekanappi = false;
                 //vapautetaan napit
                 if(!vapautanapit && !pelaajaninputit[SDLK_ESCAPE] && !pelaajaninputit[SDLK_RETURN]) vapautanapit = true;
                 
                 //lasketaan kasautuminen
                 if(!pois1) kasautuminen++;
                 else kasautuminen--;
                 kasautuminen2++;
                 palkkikasautuminen+= palkkikasautumisnopeus;
                 if(!mppois) mpkasautuminen++;
                 else mpkasautuminen--;
                 if(palkkikasautuminen > suurinexpa) palkkikasautuminen = suurinexpa;
                 if(pois1 && kasautuminen < 1) pois2 = true;
                 if(kasautuminen < 40) SDL_SetAlpha(valkoinenfade, SDL_SRCALPHA, int(round(255 - kasautuminen * 5.625)));
                 else SDL_SetAlpha(valkoinenfade, SDL_SRCALPHA, 0);
                 
                 //testataan onko hiiri nappien päällä
                 if(kasautuminen > 40 && hiirix > 575 && hiiriy > 555) valinta = -1;
                 else valinta = 0;
                 if(kasautuminen > 40) {
                                 if(hiirix < 260 && hiiriy < 45) {
                                           if(mppois) soitaaani(nappi2); //ääni
                                           mppois = false;
                                           if(mpkasautuminen < 0) mpkasautuminen = 0;
                                 }
                                 if(hiirix > 550) {
                                           mppois = true;
                                           if(mpkasautuminen > 80) mpkasautuminen = 80;
                                 }
                 }
                 
                 //testataan irroitettiinko hiiri napin päällä
                 if(kasautuminen > 40 && valinta != 0 && hiiriprewekanappi && !hiiriekanappi) {
                           pois1 = true;
                           kasautuminen = 40;
                           soitaaani(nappi2); //ääni
                 }
                 
                 //nappiäänet
                 if(hiiriekanappi && !hiiriprewekanappi && valinta != 0) soitaaani(nappi1);
                 else if(valinta != prewvalinta && valinta != 0) {
                            if(hiiriekanappi) soitaaani(nappi1);
                            else soitaaani(nappion);
                 }
                 
                 //ESC- ja ENTER-nappi
                 if(vapautanapit) {
                                  if(pelaajaninputit[SDLK_ESCAPE] || pelaajaninputit[SDLK_RETURN]) {
                                                    if(!mppois) {
                                                                soitaaani(nappi2); //ääni
                                                                mppois = true;
                                                                if(mpkasautuminen > 80) mpkasautuminen = 80;
                                                    }
                                                    else {
                                                                if(menuvalinta != 104 && menuvalinta != 103 && menuvalinta != -1) soitaaani(nappi2); //ääni
                                                                pois1 = true;
                                                                if(kasautuminen > 40) kasautuminen = 40;
                                                    }
                                                    vapautanapit = false;
                                  }
                 }
                 
                 //äänet
                 if(palkkikasautuminen == 0) {
                           if(Mix_PlayChannel(3, tick, -1)==-1) {
                                      sprintf(viesti, "Mix_PlayChannel: %s", Mix_GetError());
                                      naytavirhe(viesti);
                           }
                 }
                 Mix_Volume(-1,aanenvoimakkuus);
                 if(palkkikasautuminen == suurinexpa) Mix_HaltChannel(3);
                 
                      //Piirretään kaikki
                 piirrakuva2(menutausta, 0, 0);
                 piirrakuva(statsteksti, 400, 50);
                 //napit
                 if(kasautuminen < 40) piirrakuva(statscontinue[0], 681, 775 - 5 * kasautuminen);
                 else if(valinta == -1 && hiiriprewekanappi) piirrakuva(statscontinue[2], 681, 575);
                 else if(valinta == -1) piirrakuva(statscontinue[1], 681, 575);
                 else piirrakuva(statscontinue[0], 681, 575);
                 if(kasautuminen < 40) piirrakuva(statsmasterpiece1, 134, 5 * kasautuminen - 175);
                 else if(mppois) piirrakuva(statsmasterpiece1, 134, 25);
                 else piirrakuva(statsmasterpiece2, 134, 25);
                 //palkit (the great wall of code)
                 /*if(palkkikasautuminen > levuraja[4]) {
                           if(vahinkoexpa > palkkikasautuminen) { piirrakuva2(statspalkki[224], 200, 210); piirraluku(int(palkkikasautuminen), 663, 217, true); }
                           else { piirrakuva2(statspalkki[int(round(vahinkoexpa * 224 / palkkikasautuminen))], 200, 210); piirraluku(vahinkoexpa, 213 + vahinkoexpa * 450 / palkkikasautuminen, 217, true); }
                           if(tarkkuusexpa > palkkikasautuminen) { piirrakuva2(statspalkki[224], 200, 260); piirraluku(int(palkkikasautuminen), 663, 267, true); }
                           else { piirrakuva2(statspalkki[int(round(tarkkuusexpa * 224 / palkkikasautuminen))], 200, 260); piirraluku(tarkkuusexpa, 213 + tarkkuusexpa * 450 / palkkikasautuminen, 267, true); }
                           if(nopeusexpa > palkkikasautuminen) { piirrakuva2(statspalkki[224], 200, 310); piirraluku(int(palkkikasautuminen), 663, 317, true); }
                           else { piirrakuva2(statspalkki[int(round(nopeusexpa * 224 / palkkikasautuminen))], 200, 310); piirraluku(nopeusexpa, 213 + nopeusexpa * 450 / palkkikasautuminen, 317, true); }
                           if(hakeutuvuusexpa > palkkikasautuminen) { piirrakuva2(statspalkki[224], 200, 360); piirraluku(int(palkkikasautuminen), 663, 367, true); }
                           else { piirrakuva2(statspalkki[int(round(hakeutuvuusexpa * 224 / palkkikasautuminen))], 200, 360); piirraluku(hakeutuvuusexpa, 213 + hakeutuvuusexpa * 450 / palkkikasautuminen, 367, true); }
                 }*/
                 if(palkkikasautuminen > 0) {
                           if(palkkikasautuminen < vahinkoexpa) { piirrakuva2(statspalkki[int(round(palkkikasautuminen / (palkkikasautuminenmax / 224)))], 200, 210); piirraluku(int(palkkikasautuminen), 213 + palkkikasautuminen / (palkkikasautuminenmax / 450), 217, true); }
                           else { piirrakuva2(statspalkki[int(round(vahinkoexpa / (palkkikasautuminenmax / 224)))], 200, 210); piirraluku(vahinkoexpa, 213 + vahinkoexpa / (palkkikasautuminenmax / 450), 217, true); }
                           if(palkkikasautuminen < tarkkuusexpa) { piirrakuva2(statspalkki[int(round(palkkikasautuminen / (palkkikasautuminenmax / 224)))], 200, 260); piirraluku(int(palkkikasautuminen), 213 + palkkikasautuminen / (palkkikasautuminenmax / 450), 267, true); }
                           else { piirrakuva2(statspalkki[int(round(tarkkuusexpa / (palkkikasautuminenmax / 224)))], 200, 260); piirraluku(tarkkuusexpa, 213 + tarkkuusexpa / (palkkikasautuminenmax / 450), 267, true); }
                           if(palkkikasautuminen < nopeusexpa) { piirrakuva2(statspalkki[int(round(palkkikasautuminen / (palkkikasautuminenmax / 224)))], 200, 310); piirraluku(int(palkkikasautuminen), 213 + palkkikasautuminen / (palkkikasautuminenmax / 450), 317, true); }
                           else { piirrakuva2(statspalkki[int(round(nopeusexpa / (palkkikasautuminenmax / 224)))], 200, 310); piirraluku(nopeusexpa, 213 + nopeusexpa / (palkkikasautuminenmax / 450), 317, true); }
                           if(palkkikasautuminen < hakeutuvuusexpa) { piirrakuva2(statspalkki[int(round(palkkikasautuminen / (palkkikasautuminenmax / 224)))], 200, 360); piirraluku(int(palkkikasautuminen), 213 + palkkikasautuminen / (palkkikasautuminenmax / 450), 367, true); }
                           else { piirrakuva2(statspalkki[int(round(hakeutuvuusexpa / (palkkikasautuminenmax / 224)))], 200, 360); piirraluku(hakeutuvuusexpa, 213 + hakeutuvuusexpa / (palkkikasautuminenmax / 450), 367, true); }
                 }
                 //tekstit
                 if(kasautuminen2 < 80) {
                                  piirrakuva2(statsdash, 0 - 150 + int(round(0.5 * (0 - 0.06) * pow(kasautuminen2, 2) + 4.9 * kasautuminen2)), 200);
                                  piirrakuva2(statsscore, 300, 650 + int(round(0.5 * 0.045 * pow(kasautuminen2, 2) + (0 - 3.675) * kasautuminen2)));
                                  piirraluku(pisteet, 486, 667 + int(round(0.5 * 0.045 * pow(kasautuminen2, 2) + (0 - 3.675) * kasautuminen2)), false);
                 }
                 else {
                                  piirrakuva2(statsdash, 50, 200);
                                  piirrakuva2(statsscore, 300, 500);
                                  piirraluku(pisteet, 486, 517, false);
                 }
                 //loput
                 if(mpkasautuminen > 0 && mpkasautuminen < 80) piirrakuva2(temptausta, 0 - 500 + int(round(0.5 * (0 - 0.15) * pow(mpkasautuminen, 2) + 12.875 * mpkasautuminen)), 25); //masterpiece
                 else if(mpkasautuminen > 79) piirrakuva2(temptausta, 50, 25);
                 if(showfpseverywhere == 2) piirraexpluku(fps, 7);
                 piirrakuva2(menutahtain, hiirix - 1, hiiriy - 1);
                 if(kasautuminen < 40) piirrakuva2(valkoinenfade, 0, 0); //fade kaiken päälle
                 
                 SDL_Flip(ruutu);
                 
                 //Lopussa tehtävät asiat
                 if(hiiriekanappi) hiiriprewekanappi = true;
                 else hiiriprewekanappi = false;
                 prewvalinta = valinta;
                 
                      if(hoidatapahtumat()) {
                                            Mix_HaltChannel(3);
                                            pois2 = true;
                      }
                      laskefps();
                      
    //tähän loppuu menun looppi
    }
    Mix_HaltChannel(3);
}
