syntax = "proto3";

package bilibili.app.topic.v1;

import "bilibili/app/dynamic/v2/dynamic.proto";
import "bilibili/app/card/v1/common.proto";
import "bilibili/app/archive/middleware/v1/preload.proto";

//
service Topic {
    //
    rpc TopicDetailsAll(TopicDetailsAllReq) returns (TopicDetailsAllReply);
    //
    rpc TopicDetailsFold(TopicDetailsFoldReq) returns (TopicDetailsFoldReply);
    //
    rpc TopicSetDetails(TopicSetDetailsReq) returns (TopicSetDetailsReply);
}

//
message ButtonMeta {
    //
    string text = 1;
    //
    string icon = 2;
}

//
message DetailsTopInfo {
    //
    TopicInfo topic_info = 1;
    //
    User user = 2;
    //
    string stats_desc = 3;
    //
    bool has_create_jurisdiction = 4;
    //
    OperationContent operation_content = 5;
    //
    string head_img_url = 6;
    //
    string head_img_backcolor = 7;
    //
    int32 word_color = 8;
    //
    int32 mission_page_show_type = 9;
    //
    string mission_url = 10;
    //
    string mission_text = 11;
    //
    TopicSet topic_set = 12;
}

//
message FoldCardItem {
    //
    int32 is_show_fold = 1;
    //
    int64 fold_count = 2;
    //
    string card_show_desc = 3;
    //
    string fold_desc = 4;
}

//
message FunctionalCard {
    //
    repeated TopicCapsule capsules = 1;
    //
    TrafficCard traffic_card = 2;
    //
    GameCard game_card = 3;
}

//
message GameCard {
    //
    int64 game_id = 1;
    //
    string game_icon = 2;
    //
    string game_name = 3;
    //
    string score = 4;
    //
    string game_tags = 5;
    //
    string notice = 6;
    //
    string game_link = 7;
}

//
message InlineProgressBar {
    //
    string icon_drag = 1;
    //
    string icon_drag_hash = 2;
    //
    string icon_stop = 3;
    //
    string icon_stop_hash = 4;
}

//
message LargeCoverInline {
    //
    bilibili.app.card.v1.Base base = 1;
    //
    string cover_left_text1 = 2;
    //
    int32 cover_left_icon1 = 3;
    //
    string cover_left_text2 = 4;
    //
    int32 cover_left_icon2 = 5;
    //
    RightTopLiveBadge right_top_live_badge = 6;
    //
    string extra_uri = 7;
    //
    InlineProgressBar inline_progress_bar = 8;
    //
    TopicThreePoint topic_three_point = 9;
    //
    string cover_left_desc = 10;
    //
    bool hide_danmu_switch = 11;
    //
    bool disable_danmu = 12;
    //
    int32 can_play = 13;
    //
    string duration_text = 14;
    //
    RelationData relation_data = 15;
}

//
message LiveBadgeResource {
    //
    string text = 1;
    //
    string animation_url = 2;
    //
    string animation_url_hash = 3;
    //
    string background_color_light = 4;
    //
    string background_color_night = 5;
    //
    int64 alpha_light = 6;
    //
    int64 alpha_night = 7;
    //
    string font_color = 8;
}

//
message OperationCard {
    oneof card {
        //
        LargeCoverInline large_cover_inline = 1;
    }
}

//
message OperationContent {
    //
    OperationCard operation_card = 1;
}

//
message PubLayer {
    //
    int32 show_type = 1;
    //
    string jump_link = 2;
    //
    ButtonMeta button_meta = 3;
    //
    bool close_pub_layer_entry = 4;
}

//
message RelationData {
    //
    bool is_fav = 1;
    //
    bool is_coin = 2;
    //
    bool is_follow = 3;
    //
    bool is_like = 4;
    //
    int64 like_count = 5;
}

//
message RightTopLiveBadge {
    //
    int64 live_status = 1;
    //
    LiveBadgeResource in_live = 2;
    //
    string live_stats_desc = 3;
}

//
message SortContent {
    //
    int64 sort_by = 1;
    //
    string sort_name = 2;
}

//
message ThreePointItem {
    //
    string title = 1;
    //
    string jump_url = 2;
}

//
message TimeLineEvents {
    //
    int64 event_id = 1;
    //
    string title = 2;
    //
    string time_desc = 3;
    //
    string jump_link = 4;
}

//
message TimeLineResource {
    //
    int64 time_line_id = 1;
    //
    string time_line_title = 2;
    //
    repeated TimeLineEvents time_line_events = 3;
    //
    bool has_more = 4;
}

//
message TopicActivities {
    //
    repeated TopicActivity activity = 1;
    //
    string act_list_title = 2;
}

//
message TopicActivity {
    //
    int64 activity_id = 1;
    //
    string activity_name = 2;
    //
    string jump_url = 3;
    //
    string icon_url = 4;
}

//
message TopicCapsule {
    //
    string name = 1;
    //
    string jump_url = 2;
    //
    string icon_url = 3;
}

//
message TopicCardItem {
    //
    int32 type = 1;
    //
    bilibili.app.dynamic.v2.DynamicItem dynamic_item = 2;
    //
    FoldCardItem ford_card_item = 3;
    //
    VideoSmallCardItem video_small_card_item = 4;
}

//
message TopicCardList {
    //
    repeated TopicCardItem topic_card_items = 1;
    //
    string offset = 2;
    //
    bool has_more = 3;
    //
    TopicSortByConf topic_sort_by_conf = 4;
}

//
enum TopicCardType {
    ILLEGAL_TYPE = 0;     //
    DYNAMIC = 1;          //
    FOLD = 2;             //
    VIDEO_SMALL_CARD = 3; //
}

//
message TopicDetailsAllReply {
    //
    DetailsTopInfo details_top_info = 1;
    //
    TopicActivities topic_activities = 2;
    //
    TopicCardList topic_card_list = 3;
    //
    FunctionalCard functional_card = 4;
    //
    PubLayer pub_layer = 5;
    //
    TimeLineResource time_line_resource = 6;
    //
    TopicServerConfig topic_server_config = 7;
}

//
message TopicDetailsAllReq {
    //
    int64 topic_id = 1;
    //
    int64 sort_by = 2;
    //
    string offset = 3;
    //
    int32 page_size = 4;
    //
    int32 local_time = 5;
    //
    bilibili.app.archive.middleware.v1.PlayerArgs player_args = 6;
    //
    int32 need_refresh = 7;
    //
    string source = 8;
    //
    int32 topic_details_ext_mode = 9;
}

//
enum TopicDetailsExtMode {
    MODE_ILLEGAL_TYPE = 0;  //
    STORY = 1;              //
}

//
message TopicDetailsFoldReply {
    //
    TopicCardList topic_card_list = 1;
    //
    int64 fold_count = 2;
}

//
message TopicDetailsFoldReq {
    //
    int64 topic_id = 1;
    //
    string offset = 2;
    //
    int32 page_size = 3;
    //
    int32 local_time = 4;
    //
    bilibili.app.archive.middleware.v1.PlayerArgs player_args = 5;
    //
    int64 from_sort_by = 6;
}

//
message TopicInfo {
    //
    int64 id = 1;
    //
    string name = 2;
    //
    int64 uid = 3;
    //
    int64 view = 4;
    //
    int64 discuss = 5;
    //
    int64 fav = 6;
    //
    int64 dynamics = 7;
    //
    int32 state = 8;
    //
    string jump_url = 9;
    //
    string backcolor = 10;
    //
    bool is_fav = 11;
    //
    string description = 12;
    //
    int32 create_source = 13;
    //
    string share_pic = 14;
    //
    int64 share = 15;
    //
    int64 like = 16;
    //
    string share_url = 17;
    //
    bool is_like = 18;
    //
    int32 type = 19;
    //
    string stats_desc = 20;
    //
    string fixed_topic_icon = 21;
}

//
message TopicServerConfig {
    //
    int64 pub_events_increase_threshold = 1;
    //
    int64 pub_events_hidden_timeout_threshold = 2;
    //
    int64 vert_online_refresh_time = 3;
}

//
message TopicSet {
    //
    int64 set_id = 1;
    //
    string set_name = 2;
    //
    string jump_url = 3;
    //
    string desc = 4;
}

//
message TopicSetDetailsReply {
    //
    TopicSetHeadInfo topic_set_head_info = 1;
    //
    repeated TopicInfo topic_info = 2;
    //
    bool has_more = 3;
    //
    string offset = 4;
    //
    TopicSetSortCfg sort_cfg = 5;
}

//
message TopicSetDetailsReq {
    //
    int64 set_id = 1;
    //
    int64 sort_by = 2;
    //
    string offset = 3;
    //
    int32 page_size = 4;
}

message TopicSetHeadInfo {
    //
    TopicSet topic_set = 1;
    //
    string topic_cnt_text = 2;
    //
    string head_img_url = 3;
    //
    string mission_url = 4;
    //
    string mission_text = 5;
    //
    string icon_url = 6;
    //
    bool is_fav = 7;
    //
    bool is_first_time = 8;
}

//
message TopicSetSortCfg {
    //
    int64 default_sort_by = 1;
    //
    repeated SortContent all_sort_by = 2;
}

//
message TopicSortByConf {
    //
    int64 default_sort_by = 1;
    //
    repeated SortContent all_sort_by = 2;
    //
    int64 show_sort_by = 3;
}

//
message TopicThreePoint {
    //
    repeated ThreePointItem dyn_three_point_items = 1;
}

//
message TrafficCard {
    //
    string name = 1;
    //
    string jump_url = 2;
    //
    string icon_url = 3;
    //
    string base_pic = 4;
    //
    string benefit_point = 5;
    //
    string card_desc = 6;
    //
    string jump_title = 7;
}

//
message User {
    //
    int64 uid = 1;
    //
    string face = 2;
    //
    string name = 3;
    //
    string name_desc = 4;
}

//
message VideoCardBase {
    //
    string cover = 1;
    //
    string title = 2;
    //
    string up_name = 3;
    //
    int64 play = 4;
    //
    string jump_link = 5;
    //
    int64 aid = 6;
}

//
message VideoSmallCardItem {
    //
    VideoCardBase video_card_base = 1;
    //
    string cover_left_badge_text = 2;
    //
    int64 card_stat_icon1 = 3;
    //
    string card_stat_text1 = 4;
    //
    int64 card_stat_icon2 = 5;
    //
    string card_stat_text2 = 6;
}
