package pokemon

// RawPokemon is a re-typed byte slice.
type RawPokemon []byte

// Pokemon is a struct the has fields for all relevant pokemon data from a
// RawPokemon.
type Pokemon struct {
	RawPokemon            *RawPokemon `json:"raw_pokemon"`
	EncryptionConstant    uint32      `json:"encryption_constant"`
	PokedexNumber         uint16      `json:"pokedex_number"`
	HeldItemID            uint16      `json:"held_item_id"`
	TrainerID             uint16      `json:"trainer_id"`
	SecretID              uint16      `json:"secret_id"`
	FullTrainerID         uint32      `json:"full_trainer_id"`
	Experience            uint32      `json:"experience"`
	AbilityID             uint8       `json:"ability_id"`
	AbilityNum            uint8       `json:"Ability_number"`
	PID                   uint32      `json:"pid"`
	NatureID              uint8       `json:"nature_id"`
	FatefulEncounter      bool        `json:"fateful_encounter"`
	Gender                string      `json:"gender"`
	FormID                uint8       `json:"form_id"`
	HPEV                  uint8       `json:"hp_ev"`
	AtkEV                 uint8       `json:"attack_ev"`
	DefEV                 uint8       `json:"defense_ev"`
	SpeEV                 uint8       `json:"speed_ev"`
	SpAtkEV               uint8       `json:"special_attack_ev"`
	SpDefEV               uint8       `json:"special_defense_ev"`
	PokerusDuration       uint8       `json:"pokerus_duration"`
	PokerusStrain         uint8       `json:"pokerus_strain"`
	RawNickname           []byte      `json:"raw_nickname"`
	Nickname              string      `json:"nickname"`
	Move1ID               uint16      `json:"move_1_id"`
	Move2ID               uint16      `json:"move_2_id"`
	Move3ID               uint16      `json:"move_3_id"`
	Move4ID               uint16      `json:"move_4_id"`
	Move1PP               uint8       `json:"move_1_pp"`
	Move2PP               uint8       `json:"move_2_pp"`
	Move3PP               uint8       `json:"move_3_pp"`
	Move4PP               uint8       `json:"move_4_pp"`
	Move1PPUsed           uint8       `json:"move_1_pp_used"`
	Move2PPUsed           uint8       `json:"move_2_pp_used"`
	Move3PPUsed           uint8       `json:"move_3_pp_used"`
	Move4PPUsed           uint8       `json:"move_4_pp_used"`
	EggMove1ID            uint16      `json:"egg_move_1_id"`
	EggMove2ID            uint16      `json:"egg_move_2_id"`
	EggMove3ID            uint16      `json:"egg_move_3_id"`
	EggMove4ID            uint16      `json:"egg_move_4_id"`
	HPIV                  uint32      `json:"hp_iv"`
	AtkIV                 uint32      `json:"attack_iv"`
	DefIV                 uint32      `json:"defense_iv"`
	SpeIV                 uint32      `json:"speed_iv"`
	SpAtkIV               uint32      `json:"special_attack_iv"`
	SpDefIV               uint32      `json:"special_defense_iv"`
	IsEgg                 bool        `json:"is_egg"`
	IsNicknamed           bool        `json:"is_nicknamed"`
	RawNotOTName          []byte      `json:"raw_not_ot_name"`
	NotOTName             string      `json:"not_ot_name"`
	NotOTGender           string      `json:"not_ot_gender"`
	CurrentHandlerIsOT    bool        `json:"current_handler_is_ot"`
	GeoLocation1RegionID  uint8       `json:"geo_location_1_region_id"`
	GeoLocation1CountryID uint8       `json:"geo_location_1_country_id"`
	GeoLocation2RegionID  uint8       `json:"geo_location_2_region_id"`
	GeoLocation2CountryID uint8       `json:"geo_location_2_country_id"`
	GeoLocation3RegionID  uint8       `json:"geo_location_3_region_id"`
	GeoLocation3CountryID uint8       `json:"geo_location_3_country_id"`
	GeoLocation4RegionID  uint8       `json:"geo_location_4_region_id"`
	GeoLocation4CountryID uint8       `json:"geo_location_4_country_id"`
	GeoLocation5RegionID  uint8       `json:"geo_location_5_region_id"`
	GeoLocation5CountryID uint8       `json:"geo_location_5_country_id"`
	NotOTFriendship       uint8       `json:"not_ot_friendship"`
	NotOTAffection        uint8       `json:"not_ot_affection"`
	NotOTMemoryIntensity  uint8       `json:"not_ot_memory_intensity"`
	NotOTMemoryLine       uint8       `json:"not_ot_memory_line"`
	NotOTMemoryFeeling    uint8       `json:"not_ot_memory_feeling"`
	NotOTMemoryTextVar    uint16      `json:"not_ot_memory_text_var"`
	Fullness              uint8       `json:"fullness"`
	Enjoyment             uint8       `json:"enjoyment"`
	RawOTName             []byte      `json:"raw_ot_name"`
	OTName                string      `json:"ot_name"`
	OTFriendship          uint8       `json:"ot_friendship"`
	OTAffection           uint8       `json:"ot_affection"`
	OTMemoryIntensity     uint8       `json:"ot_memory_intensity"`
	OTMemoryLine          uint8       `json:"ot_memory_line"`
	OTMemoryTextVar       uint16      `json:"ot_memory_text_var"`
	OTMemoryFeeling       uint8       `json:"ot_memory_feeling"`
	DateEggReceived       int64       `json:"date_egg_received"`
	DateMet               int64       `json:"date_met"`
	EggLocationID         uint16      `json:"egg_location_id"`
	MetLocationID         uint16      `json:"met_location_id"`
	PokeballID            uint8       `json:"pokeball_id"`
	LevelMet              uint8       `json:"level_met"`
	OTGender              string      `json:"ot_gender"`
	Gen4EncounterTypeID   uint8       `json:"gen_4_encounter_type_id"`
	OTGameID              uint8       `json:"OTGameID"`
	CountryID             uint8       `json:"CountryID"`
	RegionID              uint8       `json:"RegionID"`
	RawConsoleRegion      uint8       `json:"raw_console_region"`
	ConsoleRegion         string      `json:"console_region"`
	OTLanguageID          uint8       `json:"ot_language_id"`
}
