// Code generated by lark_sdk_gen. DO NOT EDIT.
/**
 * Copyright 2022 chyroc
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package lark

import (
	"context"
)

// GetCoreHRProcess 根据流程实例 id（process_id）获取单个流程详情。比如流程状态、流程发起人、流程发起时间、流程摘要、流程里的所有待办、已办、抄送任务等。
//
// doc: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/corehr-v2/process/get
func (r *CoreHRService) GetCoreHRProcess(ctx context.Context, request *GetCoreHRProcessReq, options ...MethodOptionFunc) (*GetCoreHRProcessResp, *Response, error) {
	if r.cli.mock.mockCoreHRGetCoreHRProcess != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] CoreHR#GetCoreHRProcess mock enable")
		return r.cli.mock.mockCoreHRGetCoreHRProcess(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "CoreHR",
		API:                   "GetCoreHRProcess",
		Method:                "GET",
		URL:                   r.cli.openBaseURL + "/open-apis/corehr/v2/processes/:process_id",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
	}
	resp := new(getCoreHRProcessResp)

	response, err := r.cli.RawRequest(ctx, req, resp)
	return resp.Data, response, err
}

// MockCoreHRGetCoreHRProcess mock CoreHRGetCoreHRProcess method
func (r *Mock) MockCoreHRGetCoreHRProcess(f func(ctx context.Context, request *GetCoreHRProcessReq, options ...MethodOptionFunc) (*GetCoreHRProcessResp, *Response, error)) {
	r.mockCoreHRGetCoreHRProcess = f
}

// UnMockCoreHRGetCoreHRProcess un-mock CoreHRGetCoreHRProcess method
func (r *Mock) UnMockCoreHRGetCoreHRProcess() {
	r.mockCoreHRGetCoreHRProcess = nil
}

// GetCoreHRProcessReq ...
type GetCoreHRProcessReq struct {
	ProcessID  string  `path:"process_id" json:"-"`    // 流程实例ID, 示例值: "7278949005675988535"
	UserIDType *IDType `query:"user_id_type" json:"-"` // 用户 ID 类型, 示例值: open_id, 可选值有: open_id: 标识一个用户在某个应用中的身份。同一个用户在不同应用中的 Open ID 不同。[了解更多: 如何获取 Open ID](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-openid), union_id: 标识一个用户在某个应用开发商下的身份。同一用户在同一开发商下的应用中的 Union ID 是相同的, 在不同开发商下的应用中的 Union ID 是不同的。通过 Union ID, 应用开发商可以把同个用户在多个应用中的身份关联起来。[了解更多: 如何获取 Union ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-union-id), user_id: 标识一个用户在某个租户内的身份。同一个用户在租户 A 和租户 B 内的 User ID 是不同的。在同一个租户内, 一个用户的 User ID 在所有应用（包括商店应用）中都保持一致。User ID 主要用于在不同的应用间打通用户数据。[了解更多: 如何获取 User ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-user-id), people_corehr_id: 以飞书人事的 ID 来识别用户, 默认值: `open_id`, 当值为 `user_id`, 字段权限要求: 获取用户 user ID
}

// GetCoreHRProcessResp ...
type GetCoreHRProcessResp struct {
	ProcessID          string                                  `json:"process_id,omitempty"`           // 流程实例ID
	Status             int64                                   `json:"status,omitempty"`               // 流程状态, 可选值有: 1: 进行中, 2: 拒绝, 4: 撤回, 8: 撤销, 9: 已完成
	FlowTemplateID     string                                  `json:"flow_template_id,omitempty"`     // 业务类型ID
	FlowTemplateName   *GetCoreHRProcessRespFlowTemplateName   `json:"flow_template_name,omitempty"`   // 业务类型名称
	FlowDefinitionID   string                                  `json:"flow_definition_id,omitempty"`   // 流程定义ID
	FlowDefinitionName *GetCoreHRProcessRespFlowDefinitionName `json:"flow_definition_name,omitempty"` // 流程定义名称
	InitiatorID        string                                  `json:"initiator_id,omitempty"`         // 流程发起人ID
	InitiatorName      *GetCoreHRProcessRespInitiatorName      `json:"initiator_name,omitempty"`       // 流程发起人姓名
	CreateTime         string                                  `json:"create_time,omitempty"`          // 流程发起时间, Unix毫秒时间戳
	CompleteTime       string                                  `json:"complete_time,omitempty"`        // 流程结束时间, Unix毫秒时间戳
	StartLinks         *GetCoreHRProcessRespStartLinks         `json:"start_links,omitempty"`          // 发起单据地址
	Abstracts          []*GetCoreHRProcessRespAbstract         `json:"abstracts,omitempty"`            // 流程摘要, 会随着流程流转发生变化
	Todos              []*GetCoreHRProcessRespTodo             `json:"todos,omitempty"`                // 待办列表
	CcList             []*GetCoreHRProcessRespCc               `json:"cc_list,omitempty"`              // 抄送列表
	DoneList           []*GetCoreHRProcessRespDone             `json:"done_list,omitempty"`            // 已办列表
	Properties         int64                                   `json:"properties,omitempty"`           // 普通流程或撤销流程等, 可选值有: 1: 普通流程, 2: 撤销流程
}

// GetCoreHRProcessRespAbstract ...
type GetCoreHRProcessRespAbstract struct {
	Name  *GetCoreHRProcessRespAbstractName  `json:"name,omitempty"`  // 摘要标题
	Value *GetCoreHRProcessRespAbstractValue `json:"value,omitempty"` // 摘要值
}

// GetCoreHRProcessRespAbstractName ...
type GetCoreHRProcessRespAbstractName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespAbstractValue ...
type GetCoreHRProcessRespAbstractValue struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespCc ...
type GetCoreHRProcessRespCc struct {
	ApproverID       string                              `json:"approver_id,omitempty"`        // 单据ID
	Links            *GetCoreHRProcessRespCcLinks        `json:"links,omitempty"`              // 单据地址
	OperatorID       string                              `json:"operator_id,omitempty"`        // 抄送人ID
	OperatorName     *GetCoreHRProcessRespCcOperatorName `json:"operator_name,omitempty"`      // 抄送人姓名
	NodeName         *GetCoreHRProcessRespCcNodeName     `json:"node_name,omitempty"`          // 节点名称
	CreateTime       string                              `json:"create_time,omitempty"`        // 抄送时间, Unix毫秒时间戳
	NodeDefinitionID string                              `json:"node_definition_id,omitempty"` // 节点定义ID（注: 在回退场景, 同一个节点会对应多个节点实例）
}

// GetCoreHRProcessRespCcLinks ...
type GetCoreHRProcessRespCcLinks struct {
	WebLink    string `json:"web_link,omitempty"`    // web端单据详情页地址
	PcLink     string `json:"pc_link,omitempty"`     // 飞书pc端单据详情页地址
	MobileLink string `json:"mobile_link,omitempty"` // 飞书移动端单据详情页地址
}

// GetCoreHRProcessRespCcNodeName ...
type GetCoreHRProcessRespCcNodeName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespCcOperatorName ...
type GetCoreHRProcessRespCcOperatorName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespDone ...
type GetCoreHRProcessRespDone struct {
	ApproverID       string                                `json:"approver_id,omitempty"`        // 单据ID
	Type             int64                                 `json:"type,omitempty"`               // 单据类型, 可选值有: 1: 审批单, 5: 表单
	Status           int64                                 `json:"status,omitempty"`             // 单据状态, 可选值有: 3: 已完成, 2: 拒绝, 4: 取消
	Links            *GetCoreHRProcessRespDoneLinks        `json:"links,omitempty"`              // 单据地址
	OperatorID       string                                `json:"operator_id,omitempty"`        // 操作人ID
	OperatorName     *GetCoreHRProcessRespDoneOperatorName `json:"operator_name,omitempty"`      // 操作人姓名
	NodeName         *GetCoreHRProcessRespDoneNodeName     `json:"node_name,omitempty"`          // 节点名称
	CreateTime       string                                `json:"create_time,omitempty"`        // 创建时间, Unix毫秒时间戳
	CompleteTime     string                                `json:"complete_time,omitempty"`      // 完成时间, Unix毫秒时间戳
	NodeDefinitionID string                                `json:"node_definition_id,omitempty"` // 节点定义ID（注: 在回退场景, 同一个节点会对应多个节点实例）
}

// GetCoreHRProcessRespDoneLinks ...
type GetCoreHRProcessRespDoneLinks struct {
	WebLink    string `json:"web_link,omitempty"`    // web端单据详情页地址
	PcLink     string `json:"pc_link,omitempty"`     // 飞书pc端单据详情页地址
	MobileLink string `json:"mobile_link,omitempty"` // 飞书移动端单据详情页地址
}

// GetCoreHRProcessRespDoneNodeName ...
type GetCoreHRProcessRespDoneNodeName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespDoneOperatorName ...
type GetCoreHRProcessRespDoneOperatorName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespFlowDefinitionName ...
type GetCoreHRProcessRespFlowDefinitionName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespFlowTemplateName ...
type GetCoreHRProcessRespFlowTemplateName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespInitiatorName ...
type GetCoreHRProcessRespInitiatorName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespStartLinks ...
type GetCoreHRProcessRespStartLinks struct {
	WebLink    string `json:"web_link,omitempty"`    // web端单据详情页地址
	PcLink     string `json:"pc_link,omitempty"`     // 飞书pc端单据详情页地址
	MobileLink string `json:"mobile_link,omitempty"` // 飞书移动端单据详情页地址
}

// GetCoreHRProcessRespTodo ...
type GetCoreHRProcessRespTodo struct {
	ApproverID       string                                `json:"approver_id,omitempty"`        // 单据ID
	Type             int64                                 `json:"type,omitempty"`               // 单据类型, 可选值有: 1: 审批单, 5: 表单
	Links            *GetCoreHRProcessRespTodoLinks        `json:"links,omitempty"`              // 单据地址
	OperatorID       string                                `json:"operator_id,omitempty"`        // 操作人ID
	OperatorName     *GetCoreHRProcessRespTodoOperatorName `json:"operator_name,omitempty"`      // 操作人姓名
	NodeName         *GetCoreHRProcessRespTodoNodeName     `json:"node_name,omitempty"`          // 节点名称
	CreateTime       string                                `json:"create_time,omitempty"`        // 创建时间, Unix毫秒时间戳
	NodeDefinitionID string                                `json:"node_definition_id,omitempty"` // 节点定义ID（注: 在回退场景, 同一个节点会对应多个节点实例）
}

// GetCoreHRProcessRespTodoLinks ...
type GetCoreHRProcessRespTodoLinks struct {
	WebLink    string `json:"web_link,omitempty"`    // web端单据详情页地址
	PcLink     string `json:"pc_link,omitempty"`     // 飞书pc端单据详情页地址
	MobileLink string `json:"mobile_link,omitempty"` // 飞书移动端单据详情页地址
}

// GetCoreHRProcessRespTodoNodeName ...
type GetCoreHRProcessRespTodoNodeName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// GetCoreHRProcessRespTodoOperatorName ...
type GetCoreHRProcessRespTodoOperatorName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文值
	EnUs string `json:"en_us,omitempty"` // 英文值
}

// getCoreHRProcessResp ...
type getCoreHRProcessResp struct {
	Code  int64                 `json:"code,omitempty"` // 错误码, 非 0 表示失败
	Msg   string                `json:"msg,omitempty"`  // 错误描述
	Data  *GetCoreHRProcessResp `json:"data,omitempty"`
	Error *ErrorDetail          `json:"error,omitempty"`
}
