import "common.proto";
import "common_base.proto";

message CStoreQuery_Query_Request {
	optional string query_name = 1;
	optional .CStoreQueryParams query = 2;
	optional .StoreBrowseContext context = 3;
	optional .StoreBrowseItemDataRequest data_request = 4;
	optional string override_country_code = 5;
}

message CStoreQuery_Query_Response {
	optional .CStoreQueryResultMetadata metadata = 1;
	repeated .StoreItemID ids = 2;
	repeated .StoreItem store_items = 3;
}

message CStoreQuery_SearchSuggestions_Request {
	optional string query_name = 1;
	optional .StoreBrowseContext context = 2;
	optional string search_term = 3;
	optional uint32 max_results = 4;
	optional .CStoreQueryFilters filters = 5;
	optional .StoreBrowseItemDataRequest data_request = 6;
	optional bool use_spellcheck = 7;
}

message CStoreQuery_SearchSuggestions_Response {
	optional .CStoreQueryResultMetadata metadata = 1;
	repeated .StoreItemID ids = 2;
	repeated .StoreItem store_items = 3;
}

message CStoreQueryFilters {
	optional bool released_only = 1;
	optional bool coming_soon_only = 2;
	optional .CStoreQueryFilters_TypeFilters type_filters = 3;
	repeated .CStoreQueryFilters_TagFilter tagids_must_match = 10;
	repeated int32 tagids_exclude = 11;
	repeated int32 content_descriptors_must_match = 15 [(.description) = "enum"];
	repeated int32 content_descriptors_excluded = 16 [(.description) = "enum"];
	optional int32 regional_top_n_sellers = 40;
	optional int32 global_top_n_sellers = 41;
	optional int32 regional_long_term_top_n_sellers = 42;
	optional int32 global_long_term_top_n_sellers = 43;
	optional .CStorePageFilter store_page_filter = 44;
	repeated uint32 parent_appids = 45;
}

message CStoreQueryFilters_TagFilter {
	repeated int32 tagids = 1;
}

message CStoreQueryFilters_TypeFilters {
	optional bool include_apps = 1;
	optional bool include_packages = 2;
	optional bool include_bundles = 3;
	optional bool include_games = 10;
	optional bool include_demos = 11;
	optional bool include_mods = 12;
	optional bool include_dlc = 13;
	optional bool include_software = 14;
	optional bool include_video = 15;
	optional bool include_hardware = 16;
	optional bool include_series = 17;
	optional bool include_music = 18;
}

message CStoreQueryParams {
	optional int32 start = 1 [default = 0];
	optional int32 count = 2 [default = 10];
	optional int32 sort = 10 [default = 0, (.description) = "enum"];
	optional .CStoreQueryFilters filters = 20;
}

message CStoreQueryPerResultMetadata {
	optional .StoreItemID id = 1;
	optional double score = 2;
	optional bool spellcheck_generated_result = 3;
}

message CStoreQueryResultMetadata {
	optional int32 total_matching_records = 1;
	optional int32 start = 2;
	optional int32 count = 3;
	repeated .CStoreQueryPerResultMetadata per_result_metadata = 4;
	repeated string spellcheck_suggestions = 5;
}

service StoreQuery {
	rpc Query (.CStoreQuery_Query_Request) returns (.CStoreQuery_Query_Response);
	rpc SearchSuggestions (.CStoreQuery_SearchSuggestions_Request) returns (.CStoreQuery_SearchSuggestions_Response);
}

