syntax = "proto3";

package im_types;

option go_package = "./im_types";

import "data_type.proto";
import "chat.proto";

// 添加联系人
message AddContactReq {
  string addr = 1;          //用户地址
  string contactAddr = 2;   //联系人地址
  string remark = 3;        //备注
}
// 拉黑联系人
message BlockContactReq {
  string addr = 1;          //用户地址
  string contactAddr = 2;   //联系人地址
}

// 移出联系人黑名单
message RemoveBlockContactReq {
  string addr = 1;          //用户地址
  string contactAddr = 2;   //联系人地址
}

// 删除联系人
message DeleteContactReq {
  string addr = 1;          //用户地址
  string contactAddr = 2;   //联系人地址
}

// 添加备注
message RemarkContactReq{
  string addr = 1;          //用户地址
  string contactAddr = 2;   //联系人地址
  string remark = 3;        //备注
}

// 修改联系人免打扰，用户和群的免打扰都走这里
message DisturbContactReq {
  string addr = 1;          //用户地址
  string contactAddr = 2;   //联系人地址，群就填群ID
  optional EnumDisturb  disturb = 3;       //免打扰状态
}

// 申请添加联系人
message RequestAddContactReq {
  string contactNodeId = 1;      //对方节点 Id（即 ContactRequestModel.toNodeId）
  string currentNodeId = 2;      //当前用户节点 Id（即 ContactRequestModel.fromNodeId）
  string content = 3;       //打招呼文案（即 ContactRequestModel.content）
}
// 内层 - 消息内容
message RequestContactMsg {
  string fromNodeId = 1;            //发送该条的节点地址
  string toNodeId = 2;              //接收该条的节点地址
  string content = 3;               //本条文案，纯文本
  int64 createdAt = 4;              //本条创建时间戳（毫秒）
  string  ext = 5;                  //扩展字段
}

// 申请添加联系人返回
message ContactRequestConversationRes {
  int64 requestId = 1;              //会话唯一 ID
  string fromNodeId = 2;            //发起申请的一方（申请人)
  optional EnumContactRequestState status = 3;//当前会话状态：0 待处理，1 已同意，2 已拒绝，默认0 |
  string fromNickname = 4;          //申请人昵称快照，列表展示用
  string fromAvatarUrl = 5;         //申请人头像 URL
  int64 fromAvatarId = 6;          //申请人头像 ID（系统头像）
  string fromDomain = 7;            //申请人域名
  string fromRemark = 8;            //当前用户对申请人设置的备注
  repeated RequestContactMsg messages = 9; //内层：该会话下的所有消息，按 createdAt 升序
  int64 version = 10;               //版本号，用于回执处理
}

// 回复申请添加联系人
message ReplyRequestAddContactReq {
  int64 requestId = 1;        //会话唯一ID，标识处理申请
  string fromNodeId = 2;      //发起方节点 Id（当前用户）
  string toNodeId = 3;        //接收方节点 Id（回复目标）
  string content = 4;         //回复附带的文案（如拒绝时说明原因、同意时打招呼等），纯文本
}

// 操作联系人状态
message HandleRequestAddContactReq {
  int64 requestId = 1;                          //会话唯一ID，标识处理申请
  optional EnumContactRequestState status = 2;           //0待处理，1 同意，2 拒绝
  optional SingleChatReq singleChat = 3;                 //同意时，发送一条单聊消息
}

// 更新联系人配置，群也是联系人
message UpdateContactConfReq {
  string contactNodeId = 1;      //对方ID，如果是群，这里填群ID
  optional EnumSwitch isTop = 2; //置顶状态
  optional EnumSwitch enableVoice = 3; //是否允许打语音，只争对群有效目前
}

// 查询联系人信息
message GetContactReq {
  string contactNodeId = 1;   //对方Id
  string currentNodeId = 2;   //当前用户Id或群Id
}

// 返回联系人信息
message GetContactInfoRes {
  string nodeId = 1;        //好友的NodeId
  string avatarUrl = 2;     //用户头像地址
  int64  avatorId = 3;      //系统头像
  string nic = 4;           //用户昵称
  string remark = 5;        //用户给好友设置的备注
  optional EnumContactState relationType = 6; //好友关系
  optional EnumContactRoleType      RoleType        = 7; //对象类型 0：用户，1：群
  string edPub = 8;         //签名公钥
  string curPub = 9;        //交换公钥
  optional EnumSwitch isTop = 10;         //置顶状态
  optional EnumDisturb notDisturbType = 11;//免打扰类型
  string ext = 12;          //拓展内容，客户端自定义
  int64 version = 13;       //版本号，用于回执处理
  string PinnedMsgList = 14;//消息至顶
  optional EnumSwitch enableVoice = 15;         //是否允许打语音，只争对群有效目前
}

// 修改消息至顶列表
message UpdatePinneMesListReq {
  string contactNodeId = 1;   //对方Id
  string currentNodeId = 2;   //当前用户Id
  string pinneMesList = 3;    //至顶列表
}


