/*


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


*/

//          asetustenlataus.cpp

#ifdef _WIN32
       #include <windows.h>
#endif
#include "global.hpp"

//ladataan grafiikka-asetukset
void lataagfxasetukset() {
      tiedosto = fopen("images/graphic_settings.dat", "r");
      if(tiedosto == NULL) { //tiedostoa ei voinut avata
                  luogfxtiedosto();
                  tiedosto = fopen("images/graphic_settings.dat", "r");
      }
      //tiedosto avattiin
                  fgets(tiedostorivi, 99, tiedosto); //skipataan
                  for(int i=0;i<3;i++) fscanf(tiedosto, "%i", &gfxviivavari[i]);
                  for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan 3 kertaa
                  for(int i=0;i<3;i++) fscanf(tiedosto, "%i", &gfxpistevari[i]);
                  fclose(tiedosto);
                  //testataan ovatko luvut virheellisiä
                  bool virhenaytetty = false;
                  for(int i=0;i<3;i++) {
                          if(gfxviivavari[i] < 0 || gfxviivavari[i] > 255) {
                                             if(i == 0) gfxviivavari[0] = 255;
                                             else gfxviivavari[i] = 0;
                                             if(!virhenaytetty) naytagfxvirhe();
                                             virhenaytetty = true;
                          }
                          if(gfxpistevari[i] < 0 || gfxpistevari[i] > 255) {
                                             if(i == 0) gfxpistevari[0] = 255;
                                             else gfxpistevari[i] = 0;
                                             if(!virhenaytetty) naytagfxvirhe();
                                             virhenaytetty = true;
                          }
                  }
                  if(virhenaytetty) {
                          #ifdef _WIN32
                          if(MessageBox(NULL, "Should I create new graphic settings file?", NULL, MB_ICONQUESTION | MB_YESNO) == IDYES) {
                                              luogfxtiedosto();
                                              lataagfxasetukset(); //ladataan asetukset uudestaan uudesta tiedostosta
                          }
                          #endif
                  }
}

//grafiikka-asetus tiedoston sisältö oli virheellinen
void naytagfxvirhe() {
     naytavirhe("Error while loading graphic settings");
}

//luodaan uusi grafiikka-asetus tiedosto
void luogfxtiedosto() {
     tiedosto = fopen("images/graphic_settings.dat", "w");
     fprintf(tiedosto, "sight line color RGB\n255 0 0\n\nsight circle color RGB\n255 0 0\n");
     fclose(tiedosto);
     log("Created new graphic settings file");
}

//ladataan asetus fullscreenille
void lataafsasetus() {
     tiedosto = fopen("settings.dat", "r");
     if(tiedosto == NULL) { //tiedostoa ei voinut avata
                 luoasetustiedosto();
                 tiedosto = fopen("settings.dat", "r");
     }
     //tiedosto avattiin
                 for(int i=0;i<24;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan 23 kertaa ja luetaan arvo
                 fullscreen = atoi(tiedostorivi);
                 fclose(tiedosto);
}

//ladataan asetukset
//ei ladata enää fullscreeniä, koska se ladattiin jo ylemmässä funktiossa
void lataaasetukset() {
     tiedosto = fopen("settings.dat", "r");
     if(tiedosto == NULL) { //tiedostoa ei voinut avata
                 luoasetustiedosto();
                 tiedosto = fopen("settings.dat", "r");
     }
     //tiedosto avattiin
                 for(int i=0;i<2;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 fasterloading = atoi(tiedostorivi);
                 for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 nosplash = atoi(tiedostorivi);
                 for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 showloadingtime = atoi(tiedostorivi);
                 for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 showfpseverywhere = atoi(tiedostorivi);
                 for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 mapdebug = atoi(tiedostorivi);
                 for(int i=0;i<4;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 mapdebugkeys = atoi(tiedostorivi);
                 for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 showexpgoals = atoi(tiedostorivi);
                 for(int i=0;i<6;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan fullscreen ja luetaan
                 showparticles = atoi(tiedostorivi);
                 for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 sightsetting = atoi(tiedostorivi);
                 for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 aanenvoimakkuus = atoi(tiedostorivi);
                 for(int i=0;i<3;i++) fgets(tiedostorivi, 99, tiedosto); //skipataan ja luetaan
                 musiikinvoimakkuus = atoi(tiedostorivi);
                 fclose(tiedosto);
                 //testataan ovatko luvut virheellisiä
                 bool virhenaytetty = false;
                 if(aanenvoimakkuus < 0 || aanenvoimakkuus > 128) {
                                    aanenvoimakkuus = 128;
                                    naytaasetusvirhe();
                                    virhenaytetty = true;
                 }
                 if(musiikinvoimakkuus < 0 || musiikinvoimakkuus > 128) {
                                    musiikinvoimakkuus = 128;
                                    if(!virhenaytetty) naytaasetusvirhe();
                                    virhenaytetty = true;
                 }
                 if(virhenaytetty) {
                                    #ifdef _WIN32
                                    if(MessageBox(NULL, "Should I create new settings file?", NULL, MB_ICONQUESTION | MB_YESNO) == IDYES) {
                                                        luoasetustiedosto();
                                                        lataaasetukset(); //ladataan asetukset uudestaan uudesta tiedostosta
                                    }
                                    #endif
                 }
}

//asetus tiedoston sisältö oli virheellinen
void naytaasetusvirhe() {
     naytavirhe("Error while loading settings");
}

//luodaan uusi asetus tiedosto
void luoasetustiedosto() {
     tiedosto = fopen("settings.dat", "w");
fprintf(tiedosto, "faster loading - disables the loading bar\n0\n\n\
no splash screen\n0\n\n\
show the time in seconds it took to load the game\n0\n\n\
show FPS:   1 = show in game   2 = show everywhere   else never show\n0\n\n\
map debug: show time in seconds in upper left corner and the enemies' names above them\n0\n\n\
enable map debug keys to change game speed: q = really slow, w = normal, e = fast, r = faster, t = ultrafast, y/u = 'invincibility' on/off\n0\n\n\
show the experience goals for the next levels also in numbers\n0\n\n\
fullscreen\n0\n\n\
show particle effects\n1\n\n\
sight:   1 = only line   2 = only circle   else both\n0\n\n\
soundvolume\n128\n\n\
musicvolume\n128\n");
     fclose(tiedosto);
     log("Created new settings file");
}

//tallennetaan muuttuneet asetukset asetustiedostoon
void tallennaasetukset() {
     tiedosto = fopen("settings.dat", "w");
fprintf(tiedosto, "faster loading - disables the loading bar\n%i\n\n\
no splash screen\n%i\n\n\
show the time in seconds it took to load the game\n%i\n\n\
show FPS:   1 = show in game   2 = show everywhere   else never show\n%i\n\n\
map debug: show time in seconds in upper left corner and the enemies' names above them\n%i\n\n\
enable map debug keys to change game speed: q = really slow, w = normal, e = fast, r = faster, t = ultrafast, y/u = 'invincibility' on/off\n%i\n\n\
show the experience goals for the next levels also in numbers\n%i\n\n\
fullscreen\n%i\n\n\
show particle effects\n%i\n\n\
sight:   1 = only line   2 = only circle   else both\n%i\n\n\
soundvolume\n%i\n\n\
musicvolume\n%i\n",
fasterloading, nosplash, showloadingtime, showfpseverywhere, mapdebug, mapdebugkeys, showexpgoals, fullscreen, showparticles, sightsetting, aanenvoimakkuus, musiikinvoimakkuus);
     fclose(tiedosto);
}
