/*


    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/>.


*/

//          stageloppu.cpp

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

//ruutu, joka näytetään statsien jälkeen, kun pelataa virallisia stage-karttoja
void stageloppu() {
     bool pois1 = false; //aloita poistuminen
     bool pois2 = false; //ulos loopista!
     float kasautuminen = 0;
     short int valinta = 0;
     short int prewvalinta = 0;
     
     bool vikastage = false;
     if(strcmp(nykyinenkartta, "Stage10") == 0 && voitto) vikastage = true;
     
     //tallennetaan progress ja asetetaan seuraava stage, jos voitettiin
     if(voitto) {
         short progresskohta = 10;
         for(int i=1;i<10;i++) {
                 char test[20];
                 sprintf(test, "Stage%i", i);
                 if(strcmp(test, nykyinenkartta) == 0) {
                                 progresskohta = i;
                                 sprintf(test, "Stage%i", i + 1);
                                 asetakartta(test);
                                 i = 10;
                 }
         }
         //tallennetaan progress
         short progress[10];
         tiedosto = fopen("maps/Stages/progress.dat", "r+");
         if(tiedosto == NULL) {
                     luoprogressf(progresskohta);
                     tiedosto = fopen("maps/Stages/progress.dat", "r+");
         }
         if(tiedosto != NULL) {
                     char c;
                     for(int i=0;i<10;i++) {
                             c = getc(tiedosto);
                             if(c == '0') progress[i] = 0;
                             else progress[i] = 1;
                     }
                     rewind(tiedosto);
                     progress[progresskohta - 1] = 1;
                     for(int i=0;i<10;i++) fprintf(tiedosto, "%i", progress[i]);
                     fclose(tiedosto);
                     sprintf(viesti, "Saved progress: stage %i completed", progresskohta);
                     log(viesti);
         }
     }
     
     SDL_Surface *teksti;
     if(vikastage) teksti = stagecompleted;
     else if(voitto) teksti = stageplaynext;
     else teksti = stageretry;
     
     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;
                 
                 //lasketaan kasautuminen
                 if(!pois1) kasautuminen++;
                 else kasautuminen--;
                 if(pois1 && kasautuminen < 1) pois2 = true;
                 
                 //testataan onko hiiri nappien päällä
                 if(kasautuminen > 20 && hiiriy > 305 && hiiriy < 344) {
                                 if(!vikastage && hiirix > 328 && hiirix < 401) valinta = 100;
                                 else if(!vikastage && hiirix > 405 && hiirix < 464) valinta = -1;
                                 else if(vikastage && hiirix > 371 && hiirix < 429) valinta = -1;
                                 else valinta = 0;
                 }
                 else valinta = 0;
                 
                 //testataan irroitettiinko hiiri napin päällä
                 if(kasautuminen > 20 && valinta != 0 && hiiriprewekanappi && !hiiriekanappi) {
                           pois1 = true;
                           menuvalinta = valinta;
                           kasautuminen = 20;
                           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);
                 }
                 
                 if(pelaajaninputit[SDLK_RETURN] && kasautuminen > 20) { //ENTER-nappi
                           soitaaani(nappi2); //ääni
                           pois1 = true;
                           if(vikastage) menuvalinta = -1;
                           else menuvalinta = 100;
                           kasautuminen = 20;
                 }
                 else if(pelaajaninputit[SDLK_ESCAPE] && kasautuminen > 20) { //ESC-nappi
                           soitaaani(nappi2); //ääni
                           pois1 = true;
                           menuvalinta = -1;
                           kasautuminen = 20;
                 }
                 
                      //Piirretään kaikki
                 SDL_SetAlpha(valkoinenfade, SDL_SRCALPHA, 255);
                 piirrakuva2(valkoinenfade, 0, 0);
                 if(kasautuminen < 20 && !pois1) piirrakuva(teksti, 1100 - 35 * kasautuminen, 275);
                 else if(kasautuminen < 20 && pois1) piirrakuva(teksti, 35 * kasautuminen - 300, 275);
                 else piirrakuva(teksti, 400, 275);
                 //napit
                 if(vikastage) {
                               if(kasautuminen < 20 && !pois1) piirrakuva(stageok[0], 1100 - 35 * kasautuminen, 325);
                               else if(kasautuminen < 20 && pois1) piirrakuva(stageok[0], 35 * kasautuminen - 300, 325);
                               else if(valinta == -1 && hiiriprewekanappi) piirrakuva(stageok[2], 400, 325);
                               else if(valinta == -1) piirrakuva(stageok[1], 400, 325);
                               else piirrakuva(stageok[0], 400, 325);
                 }
                 else {
                               if(kasautuminen < 20 && !pois1) piirrakuva(stageyes[0], 1065 - 35 * kasautuminen, 325);
                               else if(kasautuminen < 20 && pois1) piirrakuva(stageyes[0], 35 * kasautuminen - 335, 325);
                               else if(valinta == 100 && hiiriprewekanappi) piirrakuva(stageyes[2], 365, 325);
                               else if(valinta == 100) piirrakuva(stageyes[1], 365, 325);
                               else piirrakuva(stageyes[0], 365, 325);
                               if(kasautuminen < 20 && !pois1) piirrakuva(stageno[0], 1135 - 35 * kasautuminen, 325);
                               else if(kasautuminen < 20 && pois1) piirrakuva(stageno[0], 35 * kasautuminen - 265, 325);
                               else if(valinta == -1 && hiiriprewekanappi) piirrakuva(stageno[2], 435, 325);
                               else if(valinta == -1) piirrakuva(stageno[1], 435, 325);
                               else piirrakuva(stageno[0], 435, 325);
                 }
                 //loput
                 if(showfpseverywhere == 2) piirraexpluku(fps, 7);
                 piirrakuva2(menutahtain, hiirix - 1, hiiriy - 1);
                 
                 SDL_Flip(ruutu);
                 
                 //Lopussa tehtävät asiat
                 if(hiiriekanappi) hiiriprewekanappi = true;
                 else hiiriprewekanappi = false;
                 prewvalinta = valinta;
                 
                      if(hoidatapahtumat()) pois2 = true;
                      laskefps();
                      
    //tähän loppuu looppi
    }
}
