import "../base.api"
import "./label_relationship.api"

type (

    // The response data of label list | Label列表数据
    LabelSelectListResp {
        BaseDataInfo

        // Label list data | Label列表数据
        Data []LabelSelectListInfo `json:"data"`
    }

    // The response data of label list | Label群发列表数据
    LabelBatchSelectListResp {
        BaseDataInfo

        // Label list data | Label列表数据
        Data LabelBatchSelectListData `json:"data"`
    }

    // The response data of label list | Label群发列表数据
    LabelBatchSelectListData {
        Contact []LabelSelectListInfo `json:"contact"`
        Group []LabelSelectListInfo `json:"group"`
    }

    // The response data of label list | Label列表数据
    LabelListResp {
        BaseDataInfo

        // Label list data | Label列表数据
        Data LabelListInfo `json:"data"`
    }

    // Label list data | Label列表数据
    LabelListInfo {
        BaseListInfo

        // The API list data | Label列表数据
        Data  []LabelInfo  `json:"data"`
    }

    // Get label list request params | Label列表请求参数
    LabelListReq {
        PageInfo

        // Label ID list | Label ID列表
        LabelIDs  []uint64 `json:"labelIDs,optional"`

        // 标签类型：1好友，2群组，3公众号，4企业微信联系人
        Type  *int `json:"type,optional"`

        // 标签名称
        Name  *string `json:"name,optional"`

        // 标签来源：1后台创建 2个微同步
        From  *int `json:"from,optional"`

        // 标签模式：1动态 2静态
        Mode  *int `json:"mode,optional"`
    }

    // Label information response | Label信息返回体
    LabelInfoResp {
        BaseDataInfo

        // Label information | Label数据
        Data LabelInfo `json:"data"`
    }

    LabelSelectListInfo {
        // label
        Label  *string `json:"label,optional"`

        // value
        Value  *uint64 `json:"value,optional"`
    }
)

@server(
    jwt: Auth
    group: label
    middleware: Authority
)

service Wechat {
    // Create label information | 创建Label
    @handler createLabel
    post /label/create (LabelInfo) returns (BaseMsgResp)

    // Update label information | 更新Label
    @handler updateLabel
    post /label/update (LabelInfo) returns (BaseMsgResp)

    // Delete label information | 删除Label信息
    @handler deleteLabel
    post /label/delete (IDsReq) returns (BaseMsgResp)

    // Get label list | 获取Label列表
    @handler getLabelList
    post /label/list (LabelListReq) returns (LabelListResp)

    // Get label select list | 获取Label列表
    @handler getLabelSelectList
    post /label/select_list (LabelListReq) returns (LabelSelectListResp)

    // Get label select list | 获取Label群发列表
    @handler getLabelBatchSelectList
    post /label/batch_select_list (LabelListReq) returns (LabelBatchSelectListResp)

    // Get label contacts | 获取Label联系人
    @handler getLabelContacts
    post /label/contacts (LabelListReq) returns (LabelListResp)

    // Get label by ID | 通过ID获取Label
    @handler getLabelById
    post /label (IDReq) returns (LabelInfoResp)
}
