#ifndef AC_SET_OVL_GYOEI_H
#define AC_SET_OVL_GYOEI_H

#include "types.h"
#include "ac_set_manager.h"

#ifdef __cplusplus
extern "C" {
#endif

#define aSOG_TERM_TRANSITION_MAX_DAYS 5

enum fish_spawn_area {
  aSOG_SPAWN_AREA_POOL, /* river pool */
  aSOG_SPAWN_AREA_WATERFALL,
  aSOG_SPAWN_AREA_RIVER_MOUTH,
  aSOG_SPAWN_AREA_OFFING, /* aka 'deep sea' */
  aSOG_SPAWN_AREA_SEA,
  aSOG_SPAWN_AREA_RIVER,
  aSOG_SPAWN_AREA_POND,

  aSOG_SPAWN_AREA_NUM
};

#define aSOG_FISH_TYPE_INVALID -1

/* TODO: should we use the internal names for fish? */
enum fish_type {
  aSOG_FISH_TYPE_CRUCIAN_CARP,
  aSOG_FISH_TYPE_BROOK_TROUT,
  aSOG_FISH_TYPE_CARP,
  aSOG_FISH_TYPE_KOI,
  aSOG_FISH_TYPE_CATFISH,
  aSOG_FISH_TYPE_SMALL_BASS,
  aSOG_FISH_TYPE_BASS,
  aSOG_FISH_TYPE_LARGE_BASS,
  aSOG_FISH_TYPE_BLUEGILL,
  aSOG_FISH_TYPE_GIANT_CATFISH,
  aSOG_FISH_TYPE_GIANT_SNAKEHEAD,
  aSOG_FISH_TYPE_BARBEL_STEED,
  aSOG_FISH_TYPE_DACE,
  aSOG_FISH_TYPE_PALE_CHUB,
  aSOG_FISH_TYPE_BITTERLING,
  aSOG_FISH_TYPE_LOACH,
  aSOG_FISH_TYPE_POND_SMELT,
  aSOG_FISH_TYPE_SWEETFISH,
  aSOG_FISH_TYPE_CHERRY_SALMON,
  aSOG_FISH_TYPE_LARGE_CHAR,
  aSOG_FISH_TYPE_RAINBOW_TROUT,
  aSOG_FISH_TYPE_STRINGFISH,
  aSOG_FISH_TYPE_SALMON,
  aSOG_FISH_TYPE_GOLDFISH,
  aSOG_FISH_TYPE_PIRANHA,
  aSOG_FISH_TYPE_AROWANA,
  aSOG_FISH_TYPE_EEL,
  aSOG_FISH_TYPE_FRESHWATER_GOBY,
  aSOG_FISH_TYPE_ANGELFISH,
  aSOG_FISH_TYPE_GUPPY,
  aSOG_FISH_TYPE_POPEYED_GOLDFISH,
  aSOG_FISH_TYPE_COELACANTH,
  aSOG_FISH_TYPE_CRAWFISH,
  aSOG_FISH_TYPE_FROG,
  aSOG_FISH_TYPE_KILLIFISH,
  aSOG_FISH_TYPE_JELLYFISH,
  aSOG_FISH_TYPE_SEA_BASS,
  aSOG_FISH_TYPE_RED_SNAPPER,
  aSOG_FISH_TYPE_BARRED_KNIFEJAW,
  aSOG_FISH_TYPE_ARAPAIMA,

  aSOG_FISH_TYPE_NUM,
  
  /* non-fish fish */
  aSOG_FISH_TYPE_WHALE = aSOG_FISH_TYPE_NUM,
  aSOG_FISH_TYPE_EMPTY_CAN,
  aSOG_FISH_TYPE_BOOT,
  aSOG_FISH_TYPE_OLD_TIRE,
  aSOG_FISH_TYPE_SALMON2,

  aSOG_FISH_TYPE_EXTENDED_NUM
};

#define aSOG_TIME_NO_0_END 3      /* 9pm-3:59am */
#define aSOG_TIME_NO_1_END 8      /* 4am-8:59am */
#define aSOG_TIME_NO_2_END 12 + 3 /* 9am-3:59pm */
#define aSOG_TIME_NO_3_END 12 + 8 /* 4pm-8:59pm */

/* number of terms in a given month */
enum fish_term {
  aSOG_TERM_0,
  aSOG_TERM_1,

  aSOG_TERM_NUM
};

enum time_no {
  aSOG_TIME_0,
  aSOG_TIME_1,
  aSOG_TIME_2,
  aSOG_TIME_3,

  aSOG_TIME_NUM
};

enum range_proc {
  aSOG_RANGE_PROC_RIVER,
  aSOG_RANGE_PROC_SEA,
  aSOG_RANGE_PROC_OFFING,
  aSOG_RANGE_PROC_POOL,
  aSOG_RANGE_PROC_FISHING_EVENT,
  aSOG_RANGE_PROC_ISLAND,

  aSOG_RANGE_PROC_NUM
};

extern int aSOG_gyoei_set(SET_MANAGER* set_manager, GAME_PLAY* play);

#ifdef __cplusplus
}
#endif

#endif
