import "steammessages_unified_base.steamclient.proto";

option cc_generic_services = true;

enum EUserReviewScorePreference {
	k_EUserReviewScorePreference_Unset = 0;
	k_EUserReviewScorePreference_IncludeAll = 1;
	k_EUserReviewScorePreference_ExcludeBombs = 2;
}

message CStore_GetLocalizedNameForTags_Request {
	optional string language = 1;
	repeated uint32 tagids = 2;
}

message CStore_GetLocalizedNameForTags_Response {
	message Tag {
		optional uint32 tagid = 1;
		optional string english_name = 2;
		optional string name = 3;
	}

	repeated .CStore_GetLocalizedNameForTags_Response.Tag tags = 1;
}

message CStore_GetStorePreferences_Request {
}

message CStore_UserPreferences {
	optional uint32 primary_language = 1;
	optional uint32 secondary_languages = 2;
	optional bool platform_windows = 3;
	optional bool platform_mac = 4;
	optional bool platform_linux = 5;
	optional bool hide_adult_content_violence = 6;
	optional bool hide_adult_content_sex = 7;
	optional uint32 timestamp_updated = 8;
	optional bool hide_store_broadcast = 9;
	optional .EUserReviewScorePreference review_score_preference = 10 [default = k_EUserReviewScorePreference_Unset];
	optional int32 timestamp_content_descriptor_preferences_updated = 11;
}

message CStore_UserTagPreferences {
	message Tag {
		optional uint32 tagid = 1;
		optional string name = 2;
		optional uint32 timestamp_added = 3;
	}

	repeated .CStore_UserTagPreferences.Tag tags_to_exclude = 1;
}

message CStore_UserContentDescriptorPreferences {
	message ContentDescriptor {
		optional uint32 content_descriptorid = 1;
		optional uint32 timestamp_added = 2;
	}

	repeated .CStore_UserContentDescriptorPreferences.ContentDescriptor content_descriptors_to_exclude = 1;
}

message CStore_GetStorePreferences_Response {
	optional .CStore_UserPreferences preferences = 1;
	optional .CStore_UserTagPreferences tag_preferences = 2;
	optional .CStore_UserContentDescriptorPreferences content_descriptor_preferences = 3;
}

message CStore_StorePreferencesChanged_Notification {
	optional .CStore_UserPreferences preferences = 1;
	optional .CStore_UserTagPreferences tag_preferences = 2;
	optional .CStore_UserContentDescriptorPreferences content_descriptor_preferences = 3;
}

service Store {
	option (service_description) = "A service to access store data.";

	rpc GetLocalizedNameForTags (.CStore_GetLocalizedNameForTags_Request) returns (.CStore_GetLocalizedNameForTags_Response) {
		option (method_description) = "Gets tag names in a different language";
	}

	rpc GetStorePreferences (.CStore_GetStorePreferences_Request) returns (.CStore_GetStorePreferences_Response) {
		option (method_description) = "Returns the desired ratings board and maximum rating to show on the store";
	}
}

service StoreClient {
	option (service_description) = "Steam store to client notifications";
	option (service_execution_site) = k_EProtoExecutionSiteSteamClient;

	rpc NotifyStorePreferencesChanged (.CStore_StorePreferencesChanged_Notification) returns (.NoResponse) {
		option (method_description) = "Notification from server to client that the user's store preferences have changed";
	}
}
