import "base_gcmessages.proto";
import "dota_gcmessages_common_match_management.proto";

option cc_generic_services = false;

message CDOTAMatchMetadataFile {
	required int32 version = 1;
	required uint64 match_id = 2;
	optional .CDOTAMatchMetadata metadata = 3;
	optional bytes private_metadata = 5;
}

message CDOTAMatchMetadata {
	message Team {
		message PlayerKill {
			optional uint32 victim_slot = 1;
			optional uint32 count = 2;
		}

		message ItemPurchase {
			optional uint32 item_id = 1;
			optional int32 purchase_time = 2;
		}

		message InventorySnapshot {
			repeated uint32 item_id = 1;
			optional int32 game_time = 2;
			optional uint32 kills = 3;
			optional uint32 deaths = 4;
			optional uint32 assists = 5;
			optional uint32 level = 6;
		}

		message AutoStyleCriteria {
			optional uint32 name_token = 1;
			optional float value = 2;
		}

		message Player {
			optional uint32 account_id = 1;
			repeated uint32 ability_upgrades = 2;
			optional uint32 player_slot = 3;
			repeated .CSOEconItem equipped_econ_items = 4;
			repeated .CDOTAMatchMetadata.Team.PlayerKill kills = 5;
			repeated .CDOTAMatchMetadata.Team.ItemPurchase items = 6;
			optional uint32 avg_kills_x16 = 7;
			optional uint32 avg_deaths_x16 = 8;
			optional uint32 avg_assists_x16 = 9;
			optional uint32 avg_gpm_x16 = 10;
			optional uint32 avg_xpm_x16 = 11;
			optional uint32 best_kills_x16 = 12;
			optional uint32 best_assists_x16 = 13;
			optional uint32 best_gpm_x16 = 14;
			optional uint32 best_xpm_x16 = 15;
			optional uint32 win_streak = 16;
			optional uint32 best_win_streak = 17;
			optional float fight_score = 18;
			optional float farm_score = 19;
			optional float support_score = 20;
			optional float push_score = 21;
			repeated uint32 level_up_times = 22;
			repeated float graph_net_worth = 23;
			repeated .CDOTAMatchMetadata.Team.InventorySnapshot inventory_snapshot = 24;
			optional bool avg_stats_calibrated = 25;
			repeated .CDOTAMatchMetadata.Team.AutoStyleCriteria auto_style_criteria = 26;
			optional uint32 event_id = 27;
			optional uint32 event_points = 28;
		}

		optional uint32 dota_team = 1;
		repeated .CDOTAMatchMetadata.Team.Player players = 2;
		repeated float graph_experience = 3;
		repeated float graph_gold_earned = 4;
		repeated float graph_net_worth = 5;
		optional bool cm_first_pick = 6;
		optional uint32 cm_captain_player_id = 7;
		repeated uint32 cm_bans = 8;
		repeated uint32 cm_picks = 9;
		optional uint32 cm_penalty = 10;
	}

	repeated .CDOTAMatchMetadata.Team teams = 1;
	repeated .CLobbyTimedRewardDetails item_rewards = 2;
	optional fixed64 lobby_id = 3;
	optional fixed64 report_until_time = 4;
	optional bytes event_game_custom_table = 5;
}

message CDOTAMatchPrivateMetadata {
	message Team {
		message Player {
			optional uint32 account_id = 1;
			optional uint32 player_slot = 2;
			optional bytes position_stream = 3;
		}

		message Building {
			optional string unit_name = 1;
			optional uint32 position_quant_x = 2;
			optional uint32 position_quant_y = 3;
			optional float death_time = 4;
		}

		optional uint32 dota_team = 1;
		repeated .CDOTAMatchPrivateMetadata.Team.Player players = 2;
		repeated .CDOTAMatchPrivateMetadata.Team.Building buildings = 3;
	}

	repeated .CDOTAMatchPrivateMetadata.Team teams = 1;
}

