// 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"
)

// EventV1ApprovalTask 审批人同意/拒绝/转交/退回 审批任务后, 会向开发者推送审批任务状态消息。
//
// - 用户创建审批后, 推送第一个审批节点的审批任务[PENDING]状态
// - 如果当前节点是会签(AND)节点
// - 	任一审批任务被同意, 推送该任务的[APPROVED]状态
// - 	任一审批任务被拒绝, 推送该任务的[REJECTED]状态, 当前节点其他剩余任务的[DONE]状态
// - 如果当前节点是或签(OR)节点
// - 任一审批任务被同意, 推送该任务的[APPROVED]状态, 当前节点其他剩余任务的[DONE]状态, 下一个节点所有任务的[PENDING]状态
// - 任一审批任务被拒绝, 推送该任务的[REJECTED]状态, 当前节点其他所有任务的[DONE]状态
// - 如果用户对审批任务进行转交, 推送该任务的[TRANSFERRED]状态, 和被转交人任务的[PENDING]状态
// - 发起人撤回审批后, 推送剩余所有任务的[DONE]状态
// - 审批定义被管理员删除后, 推送剩余所有任务的[DONE]状态
// - 如果用户对审批任务进行退回, 推送该任务的[ROLLBACK]状态, 和被退回人任务的[PENDING]状态
// - 如果进行中的审批任务超时未处理被关闭, 推送该任务的[OVERTIME_CLOSE]状态
// - 如果超时已关闭的审批任务被手动恢复, 推送该任务的[OVERTIME_RECOVER]状态
//
// doc: https://open.feishu.cn/document/ukTMukTMukTM/uIDO24iM4YjLygjN/event/common-event/approval-task-event
// new doc: https://open.feishu.cn/document/server-docs/approval-v4/event/common-event/approval-task-event
func (r *EventCallbackService) HandlerEventV1ApprovalTask(f EventV1ApprovalTaskHandler) {
	r.cli.eventHandler.eventV1ApprovalTaskHandler = f
}

// EventV1ApprovalTaskHandler event EventV1ApprovalTask handler
type EventV1ApprovalTaskHandler func(ctx context.Context, cli *Lark, schema string, header *EventHeaderV1, event *EventV1ApprovalTask) (string, error)

// EventV1ApprovalTask ...
type EventV1ApprovalTask struct {
	AppID        string `json:"app_id,omitempty"`  // 如: cli_xxx
	OpenID       string `json:"open_id,omitempty"` // 如: ou_xxx
	TenantKey    string `json:"tenant_key,omitempty"`
	Type         string `json:"type,omitempty"`          // approval_task 固定字段
	ApprovalCode string `json:"approval_code,omitempty"` // 审批定义 Code
	InstanceCode string `json:"instance_code,omitempty"` // 审批实例 Code
	TaskID       string `json:"task_id,omitempty"`       // 审批任务 ID
	UserID       string `json:"user_id,omitempty"`       // 操作人 ID（当 task 为自动通过类型时, user_id 为空）
	Status       string `json:"status,omitempty"`        // 任务状态 REVERTED - 已还原 PENDING - 进行中 APPROVED - 已通过 REJECTED - 已拒绝 TRANSFERRED - 已转交 ROLLBACK - 已退回 DONE - 已完成
	OperateTime  string `json:"operate_time,omitempty"`  // 事件发生时间
	Extra        string `json:"extra,omitempty"`         // 扩展数据, 当前只有退回事件才有此字段, rollback_node_ids退回的节点列表, rollback_custom_node_ids用户自定义配置的节点列表
	CustomKey    string `json:"custom_key,omitempty"`    // 节点自定义ID
	DefKey       string `json:"def_key,omitempty"`       // 节点系统生成唯一ID
}
