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

message CStoreAppSimilarity_IdentifyClustersFromPlaytime_Request {
	optional fixed64 steamid = 1;
	optional int32 sort = 2 [default = 1, (.description) = "enum"];
	optional int32 clusters_to_return = 3;
	optional int32 cluster_index = 4;
	optional .StoreBrowseContext context = 10;
	optional .StoreBrowseItemDataRequest data_request = 11;
}

message CStoreAppSimilarity_IdentifyClustersFromPlaytime_Response {
	repeated .CStoreAppSimilarity_IdentifyClustersFromPlaytime_Response_Cluster clusters = 1;
}

message CStoreAppSimilarity_IdentifyClustersFromPlaytime_Response_Cluster {
	optional int32 cluster_id = 1;
	optional int32 playtime_forever = 2;
	optional int32 playtime_2weeks = 3;
	optional uint32 last_played = 4;
	repeated int32 played_appids = 5;
	repeated int32 similar_items_appids = 6;
	repeated .StoreItem similar_items = 7;
	optional double similar_item_popularity_score = 8;
}

message CStoreAppSimilarity_PrioritizeAppsForUser_Response {
	repeated .CStoreAppSimilarity_PrioritizeAppsForUser_Response_ResultItem items = 1;
}

message CStoreAppSimilarity_PrioritizeAppsForUser_Response_ResultItem {
	optional .StoreItemID id = 1;
	optional bool already_owned = 2;
	optional double weight = 3;
	optional double weight_before_dedupe = 4;
	repeated .CStoreAppSimilarity_PrioritizeAppsForUser_Response_ResultItem_MatchDebugInfo debug_matches = 50;
	optional .CStoreAppSimilarity_PrioritizeAppsForUser_Response_ResultItem_PopularityDebugInfo debug_popularity = 51;
}

message CStoreAppSimilarity_PrioritizeAppsForUser_Response_ResultItem_MatchDebugInfo {
	optional int32 source_app = 1;
	optional double weight = 2;
	optional double similarity = 3;
}

message CStoreAppSimilarity_PrioritizeAppsForUser_Response_ResultItem_PopularityDebugInfo {
	optional uint32 rank = 1;
	optional double popularity_factor = 2;
	optional double weight_before_popularity = 3;
}

service StoreAppSimilarity {
	rpc IdentifyClustersFromPlaytime (.CStoreAppSimilarity_IdentifyClustersFromPlaytime_Request) returns (.CStoreAppSimilarity_IdentifyClustersFromPlaytime_Response);
	rpc PrioritizeAppsForUser (.NotImplemented) returns (.CStoreAppSimilarity_PrioritizeAppsForUser_Response);
}

