import "../base.api"
import "./sop_stage.api"

type (
    // The response data of sop task list | SopTask列表数据
    SopTaskListResp {
        BaseDataInfo

        // SopTask list data | SopTask列表数据
        Data SopTaskListInfo `json:"data"`
    }

    // The response data of sop task record list | SopTask列表数据
    SopTaskRecordListResp {
        BaseDataInfo

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

    // SopTask list data | SopTask列表数据
    SopTaskRecordInfo {
        // NodeId 节点ID
        SourceType  *int `json:"sourceType,optional"`

        // NodeId 节点ID
        SourceId  *uint64 `json:"sourceId,optional"`

        // 节点名称
        Name  *string `json:"name,optional"`

        // 消息总数
        TotalCount *int64 `json:"totalCount,optional"`

        // 成功数
        SuccessCount *int64 `json:"successCount,optional"`

        // 失败数
        FailureCount *int64 `json:"failureCount,optional"`

        // 成功率
        SuccessRate *int64 `json:"successRate,optional"`
    }

    // SopTask list data | SopTask列表数据
    SopTaskListInfo {
        BaseListInfo

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

    // Get sop task list request params | SopTask列表请求参数
    SopTaskListReq {
        PageInfo

        // SOP 任务名称 
        Name  *string `json:"name,optional"`

        // 创建者 id 
        CreatorId  *string `json:"creatorId,optional"`
    }

    // SopTask information response | SopTask信息返回体
    SopTaskInfoResp {
        BaseDataInfo

        // SopTask information | SopTask数据
        Data SopTaskInfo `json:"data"`
    }

    // SopTask create response | SopTask创建回体
    SopTaskCreateResp {
        BaseDataInfo

        // SopTask id | SopTask id
        Data uint64 `json:"data"`
    }

    CopyReq {
        // SopTask id | SopTask id
        Id uint64 `json:"id"`

        // SOP 任务名称
        Name  *string `json:"name,optional"`

        // Organization id | Organization id
        OrganizationId uint64 `json:"organizationId,optional"`
    }

    MessageVarResp {
        BaseDataInfo

        Data MessageVarRespData `json:"data"`
    }

    MessageVarRespData {
        // 消息变量
        MessageVar []MessageVarInfo `json:"messageVar"`

        // 转发变量
        ForwardVar []MessageVarInfo `json:"forwardVar"`
    }

    MessageVarInfo {
        // 显示名称
        Label string `json:"label"`

        // 变量
        Value string `json:"value"`
    }

    SopTaskOutlineResp {
        BaseDataInfo

        Data []SopTaskOutlineInfo `json:"data"`
    }

    SopTaskOutlineInfo {
        // 标题
        Title string `json:"title,optional"`

        // key
        Key string `json:"key,optional"`

        // 子节点
        Children []SopTaskOutlineInfo `json:"children,optional"`
    }

    TestNodeReq {
        Type int `json:"type"`
        Id uint64 `json:"id"`
        content string `json:"content"`
    }

    TestNodeResp {
        BaseDataInfo
        Data []string `json:"data"`
    }
)

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

service Wechat {
    // Create sop task information | 创建SopTask
    @handler createSopTask
    post /sop_task/create (SopTaskInfo) returns (SopTaskCreateResp)

    // Update sop task information | 更新SopTask
    @handler updateSopTask
    post /sop_task/update (SopTaskInfo) returns (BaseMsgResp)

    // Delete sop task information | 删除SopTask信息
    @handler deleteSopTask
    post /sop_task/delete (IDsReq) returns (BaseMsgResp)

    // Get sop task list | 获取SopTask列表
    @handler getSopTaskList
    post /sop_task/list (SopTaskListReq) returns (SopTaskListResp)

    // Get sop task record list | 获取SopTask列表
    @handler getSopTaskRecordList
    post /sop_task/record_list (IDReq) returns (SopTaskRecordListResp)

    // Get sop task by ID | 通过ID获取SopTask
    @handler getSopTaskById
    post /sop_task (IDReq) returns (SopTaskInfoResp)

    // Get sop task by ID | 通过ID获取SopTask详情
    @handler getSopTaskDetail
    post /sop_task/detail (IDReq) returns (SopTaskInfoResp)

    // Publish sop task | 发布 SopTask
    @handler publishSopTask
    post /sop_task/publish (IDReq) returns (BaseMsgResp)

    // task start | SopTask 开始
    @handler sopTaskStart
    post /sop_task/start (IDReq) returns (BaseMsgResp)

    // task stop | SopTask 停止
    @handler sopTaskStop
    post /sop_task/stop (IDReq) returns (BaseMsgResp)

    // task start | SopTask 复制
    @handler sopTaskCopy
    post /sop_task/copy (CopyReq) returns (BaseMsgResp)

    // Get sop task list | 获取Sop消息变量
    @handler getSopMessageVar
    post /sop_task/message_var () returns (MessageVarResp)

    // 获取SopTask大纲
    @handler getSopTaskOutline
    post /sop_task/outline (IDReq) returns (SopTaskOutlineResp)

    // 测试Sop节点
    @handler testNode
    post /sop_task/test_node (TestNodeReq) returns (TestNodeResp)
}