import "dota_shared_enums.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum ETeamInviteResult {
	TEAM_INVITE_SUCCESS = 0;
	TEAM_INVITE_FAILURE_INVITE_REJECTED = 1;
	TEAM_INVITE_FAILURE_INVITE_TIMEOUT = 2;
	TEAM_INVITE_ERROR_TEAM_AT_MEMBER_LIMIT = 3;
	TEAM_INVITE_ERROR_TEAM_LOCKED = 4;
	TEAM_INVITE_ERROR_INVITEE_NOT_AVAILABLE = 5;
	TEAM_INVITE_ERROR_INVITEE_BUSY = 6;
	TEAM_INVITE_ERROR_INVITEE_ALREADY_MEMBER = 7;
	TEAM_INVITE_ERROR_INVITEE_AT_TEAM_LIMIT = 8;
	TEAM_INVITE_ERROR_INVITEE_INSUFFICIENT_PLAY_TIME = 9;
	TEAM_INVITE_ERROR_INVITER_INVALID_ACCOUNT_TYPE = 10;
	TEAM_INVITE_ERROR_INVITER_NOT_ADMIN = 11;
	TEAM_INVITE_ERROR_INCORRECT_USER_RESPONDED = 12;
	TEAM_INVITE_ERROR_UNSPECIFIED = 13;
}

message CMsgDOTATeamInfo {
	message HeroStats {
		optional uint32 hero_id = 1;
		optional uint32 picks = 2;
		optional uint32 wins = 3;
		optional uint32 bans = 4;
		optional float avg_kills = 5;
		optional float avg_deaths = 6;
		optional float avg_assists = 7;
		optional float avg_gpm = 8;
		optional float avg_xpm = 9;
	}

	message MemberStats {
		optional uint32 account_id = 1;
		optional uint32 wins_with_team = 2;
		optional uint32 losses_with_team = 3;
		repeated .CMsgDOTATeamInfo.HeroStats top_heroes = 4;
		optional float avg_kills = 5;
		optional float avg_deaths = 6;
		optional float avg_assists = 7;
	}

	message TeamStats {
		repeated .CMsgDOTATeamInfo.HeroStats played_heroes = 1;
		optional float farming = 2;
		optional float fighting = 3;
		optional float versatility = 4;
		optional float avg_kills = 5;
		optional float avg_deaths = 6;
		optional float avg_duration = 7;
	}

	message DPCResult {
		optional uint32 league_id = 1;
		optional uint32 standing = 2;
		optional uint32 points = 3;
		optional uint32 earnings = 4;
		optional uint32 timestamp = 5;
	}

	message Member {
		optional uint32 account_id = 1;
		optional uint32 time_joined = 2;
		optional bool admin = 3;
		optional string pro_name = 6;
		optional .Fantasy_Roles role = 8 [default = FANTASY_ROLE_UNDEFINED];
		optional string real_name = 9;
	}

	message AuditEntry {
		optional uint32 audit_action = 1;
		optional uint32 timestamp = 2;
		optional uint32 account_id = 3;
	}

	repeated .CMsgDOTATeamInfo.Member members = 1;
	optional uint32 team_id = 2;
	optional string name = 3;
	optional string tag = 4;
	optional uint32 time_created = 5;
	optional bool pro = 6;
	optional bool pickup_team = 8;
	optional uint64 ugc_logo = 9;
	optional uint64 ugc_base_logo = 10;
	optional uint64 ugc_banner_logo = 11;
	optional uint64 ugc_sponsor_logo = 12;
	optional string country_code = 13;
	optional string url = 14;
	optional uint32 wins = 15;
	optional uint32 losses = 16;
	optional uint32 games_played_total = 19;
	optional uint32 games_played_matchmaking = 20;
	optional string url_logo = 24;
	repeated uint32 registered_member_account_ids = 30;
	optional uint32 coach_account_id = 36;
	repeated .CMsgDOTATeamInfo.AuditEntry audit_entries = 31;
	optional .ELeagueRegion region = 29 [default = LEAGUE_REGION_UNSET];
	optional string abbreviation = 32;
	repeated .CMsgDOTATeamInfo.MemberStats member_stats = 33;
	optional .CMsgDOTATeamInfo.TeamStats team_stats = 34;
	repeated .CMsgDOTATeamInfo.DPCResult dpc_results = 35;
	optional string color_primary = 37;
	optional string color_secondary = 38;
	optional uint32 team_captain = 39;
}

message CMsgDOTATeamsInfo {
	optional uint32 league_id = 1;
	repeated .CMsgDOTATeamInfo teams = 2;
}

message CMsgDOTATeamInfoList {
	repeated .CMsgDOTATeamInfo teams = 1;
}

message CMsgDOTAMyTeamInfoRequest {
}

message CMsgDOTACreateTeam {
	optional string name = 1;
	optional string tag = 2;
	optional uint64 logo = 3;
	optional uint64 base_logo = 4;
	optional uint64 banner_logo = 5;
	optional uint64 sponsor_logo = 6;
	optional string country_code = 7;
	optional string url = 8;
	optional bool pickup_team = 9;
	optional string abbreviation = 10;
}

message CMsgDOTACreateTeamResponse {
	enum Result {
		INVALID = -1;
		SUCCESS = 0;
		NAME_EMPTY = 1;
		NAME_BAD_CHARACTERS = 2;
		NAME_TAKEN = 3;
		NAME_TOO_LONG = 4;
		TAG_EMPTY = 5;
		TAG_BAD_CHARACTERS = 6;
		TAG_TAKEN = 7;
		TAG_TOO_LONG = 8;
		CREATOR_BUSY = 9;
		UNSPECIFIED_ERROR = 10;
		CREATOR_TEAM_LIMIT_REACHED = 11;
		NO_LOGO = 12;
		CREATOR_TEAM_CREATION_COOLDOWN = 13;
		LOGO_UPLOAD_FAILED = 14;
		NAME_CHANGED_TOO_RECENTLY = 15;
		CREATOR_INSUFFICIENT_LEVEL = 16;
		INVALID_ACCOUNT_TYPE = 17;
	}

	optional .CMsgDOTACreateTeamResponse.Result result = 1 [default = INVALID];
	optional uint32 team_id = 2;
}

message CMsgDOTAEditTeamDetails {
	optional uint32 team_id = 1;
	optional string name = 2;
	optional string tag = 3;
	optional uint64 logo = 4;
	optional uint64 base_logo = 5;
	optional uint64 banner_logo = 6;
	optional uint64 sponsor_logo = 7;
	optional string country_code = 8;
	optional string url = 9;
	optional bool in_use_by_party = 10;
	optional string abbreviation = 11;
}

message CMsgDOTAEditTeamDetailsResponse {
	enum Result {
		SUCCESS = 0;
		FAILURE_INVALID_ACCOUNT_TYPE = 1;
		FAILURE_NOT_MEMBER = 2;
		FAILURE_TEAM_LOCKED = 3;
		FAILURE_UNSPECIFIED_ERROR = 4;
	}

	optional .CMsgDOTAEditTeamDetailsResponse.Result result = 1 [default = SUCCESS];
}

message CMsgDOTATeamInvite_InviterToGC {
	optional uint32 account_id = 1;
	optional uint32 team_id = 2;
}

message CMsgDOTATeamInvite_GCImmediateResponseToInviter {
	optional .ETeamInviteResult result = 1 [default = TEAM_INVITE_SUCCESS];
	optional string invitee_name = 2;
	optional uint32 required_play_time = 3;
}

message CMsgDOTATeamInvite_GCRequestToInvitee {
	optional uint32 inviter_account_id = 1;
	optional string team_name = 2;
	optional string team_tag = 3;
	optional uint64 logo = 4;
}

message CMsgDOTATeamInvite_InviteeResponseToGC {
	optional .ETeamInviteResult result = 1 [default = TEAM_INVITE_SUCCESS];
}

message CMsgDOTATeamInvite_GCResponseToInviter {
	optional .ETeamInviteResult result = 1 [default = TEAM_INVITE_SUCCESS];
	optional string invitee_name = 2;
}

message CMsgDOTATeamInvite_GCResponseToInvitee {
	optional .ETeamInviteResult result = 1 [default = TEAM_INVITE_SUCCESS];
	optional string team_name = 2;
}

message CMsgDOTAKickTeamMember {
	optional uint32 account_id = 1;
	optional uint32 team_id = 2;
}

message CMsgDOTAKickTeamMemberResponse {
	enum Result {
		SUCCESS = 0;
		FAILURE_INVALID_ACCOUNT_TYPE = 1;
		FAILURE_KICKER_NOT_ADMIN = 2;
		FAILURE_KICKEE_NOT_MEMBER = 3;
		FAILURE_TEAM_LOCKED = 4;
		FAILURE_UNSPECIFIED_ERROR = 5;
	}

	optional .CMsgDOTAKickTeamMemberResponse.Result result = 1 [default = SUCCESS];
}

message CMsgDOTATransferTeamAdmin {
	optional uint32 new_admin_account_id = 1;
	optional uint32 team_id = 2;
}

message CMsgDOTATransferTeamAdminResponse {
	enum Result {
		SUCCESS = 0;
		FAILURE_INVALID_ACCOUNT_TYPE = 1;
		FAILURE_NOT_ADMIN = 2;
		FAILURE_SAME_ACCOUNT = 3;
		FAILURE_NOT_MEMBER = 4;
		FAILURE_UNSPECIFIED_ERROR = 5;
	}

	optional .CMsgDOTATransferTeamAdminResponse.Result result = 1 [default = SUCCESS];
}

message CMsgDOTALeaveTeam {
	optional uint32 team_id = 1;
}

message CMsgDOTALeaveTeamResponse {
	enum Result {
		SUCCESS = 0;
		FAILURE_NOT_MEMBER = 1;
		FAILURE_TEAM_LOCKED = 2;
		FAILURE_UNSPECIFIED_ERROR = 3;
	}

	optional .CMsgDOTALeaveTeamResponse.Result result = 1 [default = SUCCESS];
}

message CMsgDOTABetaParticipation {
	optional uint32 access_rights = 1;
}
