#include "settings_file.h"

uint8_t read_settings(char *settings_path, setting_arr set_arr) {

  FILE* setting_file = fopen(settings_path, "r");

  if (setting_file == NULL) {
    if (errno == ENOENT) 
      return 1;

    free(set_arr.settings);
    return 0;
  }
    
  char setting_input[SET_LEN]; 

  size_t i;
  for (i = 0; i < set_arr.length; i++) {

    fgets(setting_input, sizeof(setting_input), setting_file);

    char *endptr;
    int64_t new_num = strtoll(setting_input, &endptr, 10);
    
    if (setting_input != endptr)
      set_arr.settings[i] = new_num;

  }

  fclose(setting_file);

  return 1;
}


uint8_t init_setting_arr(setting_arr *set_arr, size_t length) {
  set_arr->length = length;
  
  if (!(set_arr->settings = calloc(length, sizeof(int64_t))))
    return 0;

  return 1;
}

void free_setting_arr(setting_arr set_arr) {
  free(set_arr.settings);
}




uint8_t get_highscore(char *highscore_path, highscore *leader_board, size_t score_ammount) {

  FILE* highscore_file = fopen(highscore_path, "r");

  if(highscore_file == NULL) 
    return (errno == ENOENT) ? 1 : 0;

  char score_name[SCORE_LEN];
  char score_value[SCORE_LEN];

  uint8_t i;
  for (i = 0; i < score_ammount; i++) {

    fgets(score_name, sizeof(score_name), highscore_file);
    
    fgets(score_value, sizeof(score_value), highscore_file);
    leader_board[i].points = strtoll(score_value, NULL, 10);;

    if (score_name[0] == '\0')
      continue;
 
    uint8_t j;
    for(j = 0; score_name[j] != '\0'; j++) {
      if (score_name[j] == '\n' || score_name[j] == ' ' || score_name[j] == '\t') {
        score_name[j] = '\0';
        break;
      }
    }
  
    score_name[SCORE_LEN - 1] = '\0';
    strncpy(leader_board[i].name, score_name, SCORE_LEN);  
  }

  fclose(highscore_file);

  return 1;
}
