#include "m_notice.h"
#include "m_font.h"

static int sChk_board_save_check() {
  mNtc_board_post_c* board = Save_Get(noticeboard);
  int max = mNtc_notice_write_num();
  int i;
  int j;
  
  for (i = 0; i < max; i++) {
    u8* msg = board->message;
    if (lbRTC_time_c_save_data_check(&board->post_time)) {
      mFRm_ERRORLINE(65);
      return TRUE;
    }

    for (j = 0; j < MAIL_BODY_LEN; j++) {
      if (mFont_char_save_data_check(msg[0])) {
        mFRm_ERRORLINE(73);
        return TRUE;
      }

      msg++;
    }

    board++;
  }

  return FALSE;
}

static int sChk_weather_save_check() {
  u32 weather = mEnv_SAVE_GET_WEATHER_TYPE(Save_Get(weather));
  u32 intensity = mEnv_SAVE_GET_WEATHER_INTENSITY(Save_Get(weather));
  
  if (intensity >= mEnv_WEATHER_INTENSITY_NUM || weather >= mEnv_WEATHER_LEAVES) {
    mFRm_ERRORLINE(141);
    return TRUE;
  }
  else {
    return FALSE;
  }
}

static int sChk_snowman_save_check() {
  u8 year;
  u8 month;
  u8 day;
  u8 hour;
  mSN_snowman_save_c* data = Save_GetPointer(snowmen);

  year = Save_Get(snowman_year);
  month = Save_Get(snowman_month);
  day = Save_Get(snowman_day);
  hour = Save_Get(snowman_hour);
    
  if (
    year > GAME_YEAR_MAX - 1 ||
    month > lbRTC_DECEMBER ||
    day > 31 ||
    hour >= 24
  ) {
    mFRm_ERRORLINE(168);
    return TRUE;
  }
  else {
    int i;

    for (i = 0; i < mSN_SAVE_COUNT; i++) {
      mSN_snowman_data_c* data2 = data->snowmen_data + i;

      if (data2->score >= 4 || data2->exists > 1) {
        mFRm_ERRORLINE(179);
        return TRUE;
      }
    }
  }

  return FALSE;
}

static int sChk_check_save_take() {
  if (sChk_snowman_save_check() || sChk_board_save_check() || sChk_weather_save_check()) {
    return TRUE;
  }
  else {
    return FALSE;
  }
}
