#include "header_cpp.h"
//#include "program_options.h"
//#include "glob_var.h"

extern struct OPTIONS prog_opt;


void ReadProgramOptions(int argc, char *argv[]) {

  FILE *DATA;
  char line[150];
  char token[50];
  char name[50];
  double value;


  prog_opt.sseed = 0;
  prog_opt.initialseq = NULL;
  prog_opt.temp_depend = 0;
  prog_opt.CM = 0;

  DATA = fopen(argv[1], "r");
  assert(DATA);

  while(fgets(line,150,DATA) != NULL) {

    if(strncmp(line,"!",1)){
      sscanf(line,"%s %lf",token,&value);
      //cout << token << "\t" << value << endl;
      if (!strcmp(token,"PDB_FILE")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.pfile,name);
      }
      else if (!strcmp(token,"THR_CONTACT")) {
	prog_opt.thr = value;
      }
      else if (!strcmp(token,"AMINO_TYPES")) {
	prog_opt.Ntypes = (int) value;
      }
      else if (!strcmp(token,"MC_TEMP")) {
	prog_opt.T = value;
      }
      else if (!strcmp(token,"AVERAGE_SCORE")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.afile,name);
      }
      else if (!strcmp(token,"NRUN")) {
	prog_opt.nrun = (int) value;
      }
      else if (!strcmp(token,"STEP")) {
	prog_opt.step = (int) value;
      }
      else if (!strcmp(token,"EMFILE")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.emfname,name);
      }
      else if (!strcmp(token,"COMPOSITIONFILE")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.cfile,name);
      }
      else if( !strcmp(token,"COMPOSITION_VARIATION")) {
	prog_opt.eps = value;
      }
      else if (!strcmp(token,"CONTACT_FREQ")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.ffile,name);
      }
      else if (!strcmp(token,"OUT_FILE")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.ofile,name);
      }
      else if (!strcmp(token,"PSSM")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.prfile,name);
      }
      else if (!strcmp(token,"NATIVE_ALN")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.nalign,name);
      }
      else if (!strcmp(token,"NATIVE_ALN")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.nalign,name);
      }
      else if (!strcmp(token,"CONTROL_ALN")) {
        sscanf(line,"%*s %s",name);
        strcpy(prog_opt.calign,name);
      }
      else if (!strcmp(token,"RW")) {
	prog_opt.rw = value;
      }
      else if (!strcmp(token,"SEED")) {
	prog_opt.sseed = (int) value;
      }
      else if (!strcmp(token,"SEQUENCE_LENGTH")) {
	prog_opt.seqlength = (int) value;
      }
      else if(!strcmp(token, "INITIAL_SEQUENCE") ) {
	sscanf(line, "%*s %s", name);
	prog_opt.initialseq = new char[prog_opt.seqlength];
	strcpy(prog_opt.initialseq,name); 
      }
      else if(!strcmp(token, "TEMP_DEPENDENCE") ) {
	prog_opt.temp_depend = (int) value;
      }
      else if(!strcmp(token, "CONTACT_MATRIX") ) {
	sscanf(line, "%*s %s", name);
	strcpy(prog_opt.CMfile, name);
      }
      else if(!strcmp(token, "CM") ) {
	prog_opt.CM = (int) value;
      }
      else if(!strcmp(token, "ASTEP") ) {
	prog_opt.astep =  value;
      }
    }

  }

      fclose(DATA);

      /*if(argc>2) {  // The second parameter being the weight
	prog_opt.rw = atof(argv[2]);
      }

      if(argc>3) {
	strcpy(prog_opt.calign, argv[3]);
      }

      if(argc>4) {
	strcpy(prog_opt.nalign, argv[4]);
      }*/

      // COMMAND LINE OPTIONS
      int i;
      for(i=1;i<argc;i++) {
	if(strcmp(argv[i],"-T")==0) {
	    prog_opt.T = atof(argv[i+1]);
	}

	if(strcmp(argv[i], "-w")==0) {
	    prog_opt.rw = atof(argv[i+1]);
	}

	if(strcmp(argv[i], "-run")==0) {
	   prog_opt.nrun = atoi(argv[i+1]);
	}
	
	if(strcmp(argv[i], "-step")==0) {
 	   prog_opt.step = atoi(argv[i+1]);
	}
  	if(strcmp(argv[i], "-native")==0 ) {
	   strcpy(prog_opt.nalign, argv[i+1]);
	}
 	if(strcmp(argv[i], "-seed")==0 ) {
	   prog_opt.sseed = atoi(argv[i+1]);
	}
     }

}

