syntax = "proto3";

package bilibili.broadcast.v1;

option java_multiple_files = true;

import "google/protobuf/empty.proto";

// Push
service Push {
  rpc WatchMessage(google.protobuf.Empty) returns (stream PushMessageResp);
}

//
enum LinkType {
  LINK_TYPE_UNKNOWN = 0; // 未知
  LINK_TYPE_BANGUMI = 1; // 番剧
  LINK_TYPE_VIDEO = 2;   // 视频
  LINK_TYPE_LIVE = 3;    // 直播
}

//
message PageBlackList {
  //
  string id = 1;
}

//
message PageView {
  //
  string id = 1;
}

//
message PushMessageResp {
  // 业务类型
  enum Biz {
    // 未知
    BIZ_UNKNOWN = 0;
    // 视频
    BIZ_VIDEO = 1;
    // 直播
    BIZ_LIVE = 2;
    // 活动
    BIZ_ACTIVITY = 3;
  }
  // 消息类型
  enum Type {
    // 未知
    TYPE_UNKNOWN = 0;
    // 默认
    TYPE_DEFAULT = 1;
    // 热门
    TYPE_HOT = 2;
    // 实时
    TYPE_REALTIME = 3;
    // 推荐
    TYPE_RECOMMEND = 4;
  }
  // 展示未知
  enum Position {
    // 未知
    POS_UNKNOWN = 0;
    // 顶部
    POS_TOP = 1;
  }
  // Deprecated: 推送任务id，使用string
  int64 old_taskid = 1;
  // 业务
  // 1:是视频 2:是直播 3:是活动
  Biz biz = 2;
  // 类型
  // 1:是默认 2:是热门 3:是实时 4:是推荐
  Type type = 3;
  // 主标题
  string title = 4;
  // 副标题
  string summary = 5;
  // 图片地址
  string img = 6;
  // 跳转地址
  string link = 7;
  // 展示位置，1是顶部
  Position position = 8;
  // 展示时长（单位：秒），默认3秒
  int32 duration = 9;
  // 失效时间
  int64 expire = 10;
  // 推送任务id
  string taskid = 11;
  // 应用内推送黑名单
  // UGC:     ugc-video-detail
  // PGC:     pgc-video-detail
  // 一起看:   pgc-video-detail-theater
  // 直播:     live-room-detail
  // Story:    ugc-video-detail-vertical
  // 播单黑名单 playlist-video-detail
  repeated PageBlackList page_blackList = 12;
  // 预留pvid
  repeated PageView page_view = 13;
  // 跳转资源
  TargetResource target_resource = 14;
  //
  int32 image_frame = 15;
  //
  int32 image_marker = 16;
  //
  int32 image_position = 17;
  //
  int64 job = 18;
}

//
message TargetResource {
  //直播:   roomid
  //UGC:   avid
  //PGC:   seasonid
  //Story: avid
  //举个例子
  //Type: LINK_TYPE_BANGUMI (番剧)
  //Resource: {"seasonid":"123"}
  //
  //Type: LINK_TYPE_VIDEO (视频)
  //Resource: {"avid":"123"}
  //
  //Type: LINK_TYPE_LIVE (直播)
  //Resource: {"roomid":"123"}
  //
  LinkType Type = 1;
  //
  map<string, string> Resource = 2;
}
