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"`
}
