syntax = "proto3";
package POGOProtos.Networking.Requests.Messages;

import public "POGOProtos.Inventory.Item.proto";
import public "POGOProtos.Data.Battle.proto";
import public "POGOProtos.Enums.proto";
import public "POGOProtos.Data.Player.proto";

message AddFortModifierMessage {
	.POGOProtos.Inventory.Item.ItemId modifier_type = 1;
	string fort_id = 2;
	double player_latitude = 3;
	double player_longitude = 4;
}
message AttackGymMessage {
	string gym_id = 1;
	string battle_id = 2;
	repeated .POGOProtos.Data.Battle.BattleAction attack_actions = 3;
	.POGOProtos.Data.Battle.BattleAction last_retrieved_action = 4;
	double player_latitude = 5;
	double player_longitude = 6;
}
message CatchPokemonMessage {
	fixed64 encounter_id = 1;
	.POGOProtos.Inventory.Item.ItemId pokeball = 2;
	double normalized_reticle_size = 3;
	string spawn_point_id = 4;
	bool hit_pokemon = 5;
	double spin_modifier = 6;
	double normalized_hit_position = 7;
}
message CheckAwardedBadgesMessage {
	// No message needed.
}
message CheckChallengeMessage {
	bool debug_request = 1;
}
message ClaimCodenameMessage {
	string codename = 1;
	bool force = 2;
}
message CollectDailyBonusMessage {
	// No message needed.
}
message CollectDailyDefenderBonusMessage {
	// No message needed.
}
message DiskEncounterMessage {
	uint64 encounter_id = 1;
	string fort_id = 2;
	double player_latitude = 3;
	double player_longitude = 4;
}
message DownloadItemTemplatesMessage {
	bool paginate = 1;
	int32 page_offset = 2;
	uint64 page_timestamp = 3;
}
message DownloadRemoteConfigVersionMessage {
	.POGOProtos.Enums.Platform platform = 1;
	string device_manufacturer = 2;
	string device_model = 3;
	string locale = 4;
	uint32 app_version = 5;
}
message DownloadSettingsMessage {
	string hash = 1;
}
message EchoMessage {
	// No message needed.
}
message EncounterMessage {
	fixed64 encounter_id = 1;
	string spawn_point_id = 2;
	double player_latitude = 3;
	double player_longitude = 4;
}
message EncounterTutorialCompleteMessage {
	.POGOProtos.Enums.PokemonId pokemon_id = 1;
}
message EquipBadgeMessage {
	.POGOProtos.Enums.BadgeType badge_type = 1;
}
message EvolvePokemonMessage {
	fixed64 pokemon_id = 1;
	.POGOProtos.Inventory.Item.ItemId evolution_item_requirement = 2;
}
message FortDeployPokemonMessage {
	string fort_id = 1;
	fixed64 pokemon_id = 2;
	double player_latitude = 3;
	double player_longitude = 4;
}
message FortDetailsMessage {
	string fort_id = 1;
	double latitude = 2;
	double longitude = 3;
}
message FortRecallPokemonMessage {
	string fort_id = 1;
	fixed64 pokemon_id = 2;
	double player_latitude = 3;
	double player_longitude = 4;
}
message FortSearchMessage {
	string fort_id = 1;
	double player_latitude = 2;
	double player_longitude = 3;
	double fort_latitude = 4;
	double fort_longitude = 5;
}
message GetAssetDigestMessage {
	.POGOProtos.Enums.Platform platform = 1;
	string device_manufacturer = 2;
	string device_model = 3;
	string locale = 4;
	uint32 app_version = 5;
	bool paginate = 6;
	int32 page_offset = 7;
	uint64 page_timestamp = 8;
}
message GetBuddyWalkedMessage {
}
message GetDownloadUrlsMessage {
	repeated string asset_id = 1;
}
message GetGymDetailsMessage {
	string gym_id = 1;
	double player_latitude = 2;
	double player_longitude = 3;
	double gym_latitude = 4;
	double gym_longitude = 5;
	string client_version = 6;
}
message GetHatchedEggsMessage {
	// No message needed.
}
message GetInboxMessage {
	bool is_history = 1;
	bool is_reverse = 2;
	int64 not_before_ms = 3;
}
message GetIncensePokemonMessage {
	double player_latitude = 1;
	double player_longitude = 2;
}
message GetInventoryMessage {
	int64 last_timestamp_ms = 1;
	int32 item_been_seen = 2;  // TODO: Find out what this is.
}
message GetMapObjectsMessage {
	repeated uint64 cell_id = 1 [packed = true];
	repeated int64 since_timestamp_ms = 2 [packed = true];
	double latitude = 3;
	double longitude = 4;
}
message GetPlayerMessage {
	.POGOProtos.Networking.Requests.Messages.GetPlayerMessage.PlayerLocale player_locale = 1;

	message PlayerLocale {
		string country = 1;
		string language = 2;
		string timezone = 3;
	}
}
message GetPlayerProfileMessage {
	string player_name = 1;
}
message IncenseEncounterMessage {
	uint64 encounter_id = 1;
	string encounter_location = 2;
}
message LevelUpRewardsMessage {
	int32 level = 1;
}
message ListAvatarCustomizationsMessage {
	.POGOProtos.Data.Player.PlayerAvatarType avatar_type = 1;
	repeated .POGOProtos.Enums.Slot slot = 2;
	repeated .POGOProtos.Enums.Filter filters = 3;
	int32 start = 4;
	int32 limit = 5;
}
message MarkTutorialCompleteMessage {
	repeated .POGOProtos.Enums.TutorialState tutorials_completed = 1;
	bool send_marketing_emails = 2;
	bool send_push_notifications = 3;
}
message NicknamePokemonMessage {
	fixed64 pokemon_id = 1;
	string nickname = 2;
}
message PushNotificationRegistryMessage {
	.POGOProtos.Networking.Requests.Messages.PushNotificationRegistryMessage.ApnToken apn_token = 1;
	.POGOProtos.Networking.Requests.Messages.PushNotificationRegistryMessage.GcmToken gcm_token = 2;

	message ApnToken {
		string registration_id = 1;
		string bundle_identifier = 2;
		int32 payload_byte_size = 3;
	}

	message GcmToken {
		string registration_id = 1;
	}
}
message RecycleInventoryItemMessage {
	.POGOProtos.Inventory.Item.ItemId item_id = 1;
	int32 count = 2;
}
message RegisterBackgroundDeviceMessage {
	string device_type = 1;
	string device_id = 2;
}
message ReleasePokemonMessage {
	fixed64 pokemon_id = 1;
	repeated fixed64 pokemon_ids = 2;
}
message SetAvatarItemAsViewedMessage {
	repeated string avatar_template_id = 1;
}
message SetAvatarMessage {
	.POGOProtos.Data.Player.PlayerAvatar player_avatar = 2;
}
message SetBuddyPokemonMessage {
	fixed64 pokemon_id = 1;
}
message SetContactSettingsMessage {
	.POGOProtos.Data.Player.ContactSettings contact_settings = 1;
}
message SetFavoritePokemonMessage {
	int64 pokemon_id = 1;  // Do not change https://github.com/AeonLucid/POGOProtos/pull/126
	bool is_favorite = 2;
}
message SetPlayerTeamMessage {
	.POGOProtos.Enums.TeamColor team = 1;
}
message SfidaActionLogMessage {
	// No message needed.
}
message SfidaRegistrationMessage {
	string sfida_id = 1;
}
message StartGymBattleMessage {
	string gym_id = 1;
	repeated fixed64 attacking_pokemon_ids = 2;
	fixed64 defending_pokemon_id = 3;  // needs to be fixed64, tested by Grover
	double player_latitude = 4;
	double player_longitude = 5;
}
message UpdateNotificationMessage {
	repeated string notification_ids = 1;
	repeated int64 create_timestamp_ms = 2;
	.POGOProtos.Enums.NotificationState state = 3;
}
message UpgradePokemonMessage {
	fixed64 pokemon_id = 1;
}
message UseIncenseMessage {
	.POGOProtos.Inventory.Item.ItemId incense_type = 1;
}
message UseItemCaptureMessage {
	.POGOProtos.Inventory.Item.ItemId item_id = 1;
	fixed64 encounter_id = 2;
	string spawn_point_id = 3;
}
message UseItemEggIncubatorMessage {
	string item_id = 1;
	uint64 pokemon_id = 2;
}
message UseItemEncounterMessage {
	.POGOProtos.Inventory.Item.ItemId item = 1;
	fixed64 encounter_id = 2;
	string spawn_point_guid = 3;
}
message UseItemGymMessage {
	.POGOProtos.Inventory.Item.ItemId item_id = 1;
	string gym_id = 2;
	double player_latitude = 3;
	double player_longitude = 4;
}
message UseItemPotionMessage {
	.POGOProtos.Inventory.Item.ItemId item_id = 1;
	fixed64 pokemon_id = 2;
}
message UseItemReviveMessage {
	.POGOProtos.Inventory.Item.ItemId item_id = 1;
	fixed64 pokemon_id = 2;
}
message UseItemXpBoostMessage {
	.POGOProtos.Inventory.Item.ItemId item_id = 1;
}
message VerifyChallengeMessage {
	string token = 1;
}
