import "dota_shared_enums.proto";
import "dota_gcmessages_common_lobby.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum ECoachTeammateRating {
	k_ECoachTeammateRating_None = 0;
	k_ECoachTeammateRating_Positive = 1;
	k_ECoachTeammateRating_Negative = 2;
	k_ECoachTeammateRating_Abusive = 3;
}

enum EPrivateCoachingSessionState {
	k_ePrivateCoachingSessionState_Invalid = 0;
	k_ePrivateCoachingSessionState_SearchingForCoach = 1;
	k_ePrivateCoachingSessionState_CoachAssigned = 2;
	k_ePrivateCoachingSessionState_Finished = 3;
	k_ePrivateCoachingSessionState_Expired = 4;
	k_ePrivateCoachingSessionState_Abandoned = 5;
}

enum EPrivateCoachingSessionMemberFlag {
	k_EPrivateCoachingSessionMemberFlag_Requester = 1;
	k_EPrivateCoachingSessionMemberFlag_Coach = 2;
	k_EPrivateCoachingSessionMemberFlag_LeftSession = 4;
}

enum EPlayerCoachMatchFlag {
	k_EPlayerCoachMatchFlag_EligibleForRewards = 1;
	k_EPlayerCoachMatchFlag_PrivateCoach = 2;
}

message CMsgPlayerCoachMatch {
	optional uint64 match_id = 1;
	optional .EMatchOutcome match_outcome = 2 [default = k_EMatchOutcome_Unknown];
	optional uint32 coached_team = 3;
	optional fixed32 start_time = 4;
	optional uint32 duration = 5;
	repeated .ECoachTeammateRating teammate_ratings = 6;
	optional uint32 coach_flags = 7;
}

message CMsgPrivateCoachingSessionMember {
	optional uint32 account_id = 1;
	optional uint32 member_flags = 2;
	optional .ECoachTeammateRating member_session_rating = 3 [default = k_ECoachTeammateRating_None];
}

message CMsgPrivateCoachingSession {
	optional uint64 private_coaching_session_id = 1;
	optional fixed32 requested_timestamp = 2;
	optional uint32 requested_language = 3;
	optional .EPrivateCoachingSessionState coaching_session_state = 4 [default = k_ePrivateCoachingSessionState_Invalid];
	repeated .CMsgPrivateCoachingSessionMember session_members = 5;
	optional uint64 current_lobby_id = 6;
	optional uint64 current_server_steam_id = 7;
	optional fixed32 accepted_timestamp = 8;
	optional fixed32 completed_timestamp = 9;
}

message CMsgPrivateCoachingSessionStatus {
	optional uint32 requester_competitive_rank_tier = 1;
	optional uint32 requester_games_played = 2;
}

message CMsgAvailablePrivateCoachingSession {
	optional .CMsgPrivateCoachingSession coaching_session = 1;
	optional .CMsgPrivateCoachingSessionStatus coaching_session_status = 2;
}

message CMsgAvailablePrivateCoachingSessionList {
	repeated .CMsgAvailablePrivateCoachingSession available_coaching_sessions = 1;
}

message CMsgAvailablePrivateCoachingSessionSummary {
	optional uint32 coaching_session_count = 1;
}

message CMsgClientToGCRequestPlayerCoachMatches {
}

message CMsgClientToGCRequestPlayerCoachMatchesResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
	}

	optional .CMsgClientToGCRequestPlayerCoachMatchesResponse.EResponse result = 1 [default = k_eInternalError];
	repeated .CMsgPlayerCoachMatch coach_matches = 2;
}

message CMsgClientToGCRequestPlayerCoachMatch {
	optional uint64 match_id = 1;
}

message CMsgClientToGCRequestPlayerCoachMatchResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
	}

	optional .CMsgClientToGCRequestPlayerCoachMatchResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgPlayerCoachMatch coach_match = 2;
}

message CMsgClientToGCSubmitCoachTeammateRating {
	optional uint64 match_id = 1;
	optional uint32 coach_account_id = 2;
	optional .ECoachTeammateRating rating = 3 [default = k_ECoachTeammateRating_None];
	optional string reason = 4;
}

message CMsgClientToGCSubmitCoachTeammateRatingResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eInvalidInput = 4;
		k_eAlreadySubmitted = 5;
		k_eVotingFinished = 6;
		k_ePlayerNotInMatch = 7;
		k_eCoachNotInMatch = 8;
		k_ePlayerNotOnCoachTeam = 9;
		k_ePlayerInSamePartyAsCoach = 10;
		k_eMatchNotEligible = 11;
	}

	optional .CMsgClientToGCSubmitCoachTeammateRatingResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgGCToClientCoachTeammateRatingsChanged {
	optional .CMsgPlayerCoachMatch coach_match = 1;
}

message CMsgClientToGCRequestPrivateCoachingSession {
	optional uint32 language = 1;
}

message CMsgClientToGCRequestPrivateCoachingSessionResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eAlreadyInSession = 5;
		k_eBehaviorScoreTooLow = 6;
		k_eInvalidLobbyType = 7;
		k_eLowPriorityPlayer = 8;
		k_eLowPriorityLobby = 9;
		k_eLowPriorityParty = 10;
		k_eTextChatBan = 11;
		k_eVoiceChatBan = 12;
		k_eMatchBan = 13;
	}

	optional .CMsgClientToGCRequestPrivateCoachingSessionResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgPrivateCoachingSession coaching_session = 2;
}

message CMsgClientToGCAcceptPrivateCoachingSession {
	optional uint64 coaching_session_id = 1;
}

message CMsgClientToGCAcceptPrivateCoachingSessionResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eUnknownSession = 5;
		k_eAlreadyHasCoach = 6;
		k_eAlreadyHasSession = 7;
		k_eInvalidUser = 8;
		k_eAlreadyFinished = 9;
		k_eInvalidLobbyType = 10;
		k_eAlreadyInLobby = 11;
		k_eLobbyIsLan = 12;
		k_eLobbyIsLeague = 13;
		k_eInvalidLobbyState = 14;
		k_eRequesterIsNotPlayer = 15;
		k_eTooManyCoaches = 16;
		k_eCoachWasPlayer = 17;
		k_eCoachBehaviorScoreTooLow = 18;
		k_eCoachRankNotCalibrated = 19;
		k_eCoachRankNotEligible = 20;
		k_eCoachRankTooLow = 21;
	}

	optional .CMsgClientToGCAcceptPrivateCoachingSessionResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgPrivateCoachingSession coaching_session = 2;
}

message CMsgClientToGCLeavePrivateCoachingSession {
}

message CMsgClientToGCLeavePrivateCoachingSessionResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eNoSession = 5;
		k_eAlreadyLeft = 6;
	}

	optional .CMsgClientToGCLeavePrivateCoachingSessionResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCGetCurrentPrivateCoachingSession {
}

message CMsgClientToGCGetCurrentPrivateCoachingSessionResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
	}

	optional .CMsgClientToGCGetCurrentPrivateCoachingSessionResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgPrivateCoachingSession current_session = 2;
}

message CMsgGCToClientPrivateCoachingSessionUpdated {
	optional .CMsgPrivateCoachingSession coaching_session = 1;
}

message CMsgClientToGCSubmitPrivateCoachingSessionRating {
	optional uint64 coaching_session_id = 1;
	optional .ECoachTeammateRating session_rating = 2 [default = k_ECoachTeammateRating_None];
}

message CMsgClientToGCSubmitPrivateCoachingSessionRatingResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eUnknownSession = 5;
		k_eNotMember = 6;
		k_eAlreadySubmitted = 7;
		k_eSessionActive = 8;
		k_eSessionTooShort = 9;
		k_eNoCoach = 10;
		k_eInvalidRating = 11;
	}

	optional .CMsgClientToGCSubmitPrivateCoachingSessionRatingResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCGetAvailablePrivateCoachingSessions {
	optional uint32 language = 1;
}

message CMsgClientToGCGetAvailablePrivateCoachingSessionsResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
	}

	optional .CMsgClientToGCGetAvailablePrivateCoachingSessionsResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgAvailablePrivateCoachingSessionList available_sessions_list = 2;
}

message CMsgClientToGCGetAvailablePrivateCoachingSessionsSummary {
}

message CMsgClientToGCGetAvailablePrivateCoachingSessionsSummaryResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
	}

	optional .CMsgClientToGCGetAvailablePrivateCoachingSessionsSummaryResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgAvailablePrivateCoachingSessionSummary coaching_session_summary = 2;
}

message CMsgClientToGCJoinPrivateCoachingSessionLobby {
}

message CMsgClientToGCJoinPrivateCoachingSessionLobbyResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eNoSession = 5;
		k_eSessionFinished = 6;
		k_eAlreadyLeft = 7;
		k_eNotACoach = 8;
		k_eNoLobby = 9;
		k_eCoachInThisLobby = 10;
		k_eCoachInALobby = 11;
		k_eLobbyIsLan = 12;
		k_eLobbyIsLeague = 13;
		k_eInvalidLobbyType = 14;
		k_eInvalidLobbyState = 15;
		k_eRequesterIsNotPlayer = 16;
		k_eTooManyCoaches = 17;
		k_eCoachWasPlayer = 18;
		k_eJoinFailed = 19;
	}

	optional .CMsgClientToGCJoinPrivateCoachingSessionLobbyResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCCoachFriend {
	optional uint32 target_account_id = 1;
}

message CMsgClientToGCCoachFriendResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eCoachNotSubscriber = 5;
		k_eLobbyNotFound = 6;
		k_eFriendsOnBothSides = 7;
		k_eNotFriends = 8;
		k_eCoachInThisLobby = 9;
		k_eCoachInALobby = 10;
		k_eLobbyIsLan = 11;
		k_eInvalidLobbyType = 12;
		k_eInvalidLobbyState = 13;
		k_eFriendIsNotAPlayer = 14;
		k_eTooManyCoaches = 15;
		k_eCoachSwitchedTeams = 16;
		k_eLobbyIsLeague = 17;
		k_eCoachWasPlayer = 18;
		k_eRequestRejected = 19;
	}

	optional .CMsgClientToGCCoachFriendResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCRespondToCoachFriendRequest {
	optional uint32 coach_account_id = 1;
	optional .ELobbyMemberCoachRequestState response = 2 [default = k_eLobbyMemberCoachRequestState_None];
}

message CMsgClientToGCRespondToCoachFriendRequestResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eLobbyNotFound = 5;
		k_eInvalidLobbyState = 6;
		k_eCoachNotInLobby = 7;
		k_ePlayerInvalidTeam = 8;
		k_eCoachInvalidTeam = 9;
		k_eNoRequest = 10;
		k_eInvalidResponse = 11;
		k_eAlreadyResponded = 12;
	}

	optional .CMsgClientToGCRespondToCoachFriendRequestResponse.EResponse result = 1 [default = k_eInternalError];
}
