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

// GetTaskList 基于调用身份, 列出特定类型的所有任务。支持分页。
//
// 目前只支持列取任务界面上“我负责的”任务。返回的任务数据按照任务在”我负责的“界面中”自定义拖拽“的顺序排序。
//
// doc: https://open.larkoffice.com/document/uAjLw4CM/ukTMukTMukTM/task-v2/task/list
func (r *TaskService) GetTaskList(ctx context.Context, request *GetTaskListReq, options ...MethodOptionFunc) (*GetTaskListResp, *Response, error) {
	if r.cli.mock.mockTaskGetTaskList != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Task#GetTaskList mock enable")
		return r.cli.mock.mockTaskGetTaskList(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:               "Task",
		API:                 "GetTaskList",
		Method:              "GET",
		URL:                 r.cli.openBaseURL + "/open-apis/task/v2/tasks",
		Body:                request,
		MethodOption:        newMethodOption(options),
		NeedUserAccessToken: true,
	}
	resp := new(getTaskListResp)

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

// MockTaskGetTaskList mock TaskGetTaskList method
func (r *Mock) MockTaskGetTaskList(f func(ctx context.Context, request *GetTaskListReq, options ...MethodOptionFunc) (*GetTaskListResp, *Response, error)) {
	r.mockTaskGetTaskList = f
}

// UnMockTaskGetTaskList un-mock TaskGetTaskList method
func (r *Mock) UnMockTaskGetTaskList() {
	r.mockTaskGetTaskList = nil
}

// GetTaskListReq ...
type GetTaskListReq struct {
	PageSize   *int64  `query:"page_size" json:"-"`    // 每页的任务数量, 示例值: 50, 默认值: `50`, 取值范围: `1` ～ `100`
	PageToken  *string `query:"page_token" json:"-"`   // 分页标记, 第一次请求不填, 表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token, 下次遍历可采用该 page_token 获取查询结果, 示例值: aWQ9NzEwMjMzMjMxMDE=
	Completed  *bool   `query:"completed" json:"-"`    // 是否按任务完成进行过滤。填写true表示只列出已完成任务；填写false表示只列出未完成任务。不填写表示不过滤, 示例值: true
	Type       *string `query:"type" json:"-"`         // 列取任务的类型, 目前只支持"my_tasks", 即“我负责的”, 示例值: my_tasks, 默认值: `my_tasks`
	UserIDType *IDType `query:"user_id_type" json:"-"` // 用户 ID 类型, 示例值: open_id, 默认值: `open_id`
}

// GetTaskListResp ...
type GetTaskListResp struct {
	Items     []*GetTaskListRespItem `json:"items,omitempty"`      // 返回的任务列表
	PageToken string                 `json:"page_token,omitempty"` // 分页标记, 当 has_more 为 true 时, 会同时返回新的 page_token, 否则不返回 page_token
	HasMore   bool                   `json:"has_more,omitempty"`   // 是否还有更多项
}

// GetTaskListRespItem ...
type GetTaskListRespItem struct {
	Guid           string                             `json:"guid,omitempty"`             // 任务guid, 任务的唯一ID
	Summary        string                             `json:"summary,omitempty"`          // 任务标题
	Description    string                             `json:"description,omitempty"`      // 任务备注
	Due            *GetTaskListRespItemDue            `json:"due,omitempty"`              // 任务截止时间
	Reminders      []*GetTaskListRespItemReminder     `json:"reminders,omitempty"`        // 任务的提醒配置列表。目前每个任务最多有1个。
	Creator        *GetTaskListRespItemCreator        `json:"creator,omitempty"`          // 任务创建者
	Members        []*GetTaskListRespItemMember       `json:"members,omitempty"`          // 任务成员列表
	CompletedAt    string                             `json:"completed_at,omitempty"`     // 任务完成的时间戳(ms)
	Attachments    []*GetTaskListRespItemAttachment   `json:"attachments,omitempty"`      // 任务的附件列表
	Origin         *GetTaskListRespItemOrigin         `json:"origin,omitempty"`           // 任务关联的第三方平台来源信息。创建是设置后就不可更改。
	Extra          string                             `json:"extra,omitempty"`            // 任务附带的自定义数据。
	Tasklists      []*GetTaskListRespItemTasklist     `json:"tasklists,omitempty"`        // 任务所属清单的名字。调用者只能看到有权限访问的清单的列表。
	RepeatRule     string                             `json:"repeat_rule,omitempty"`      // 如果任务为重复任务, 返回重复任务的配置
	ParentTaskGuid string                             `json:"parent_task_guid,omitempty"` // 如果当前任务为某个任务的子任务, 返回父任务的guid
	Mode           int64                              `json:"mode,omitempty"`             // 任务的模式。1 - 会签任务；2 - 或签任务
	Source         int64                              `json:"source,omitempty"`           // 任务创建的来源, 可选值有: 0: 未知来源, 1: 任务中心, 2: 群组任务/消息转任务, 6: 通过开放平台以tenant_access_token授权创建的任务, 7: 通过开放平台以user_access_token授权创建的任务, 8: 文档任务
	CustomComplete *GetTaskListRespItemCustomComplete `json:"custom_complete,omitempty"`  // 任务的自定义完成配置
	TaskID         string                             `json:"task_id,omitempty"`          // 任务界面上的代码
	CreatedAt      string                             `json:"created_at,omitempty"`       // 任务创建时间戳(ms)
	UpdatedAt      string                             `json:"updated_at,omitempty"`       // 任务最后一次更新的时间戳(ms)
	Status         string                             `json:"status,omitempty"`           // 任务的状态, 支持"todo"和"done"两种状态
	URL            string                             `json:"url,omitempty"`              // 任务的分享链接
	Start          *GetTaskListRespItemStart          `json:"start,omitempty"`            // 任务的开始时间
	SubtaskCount   int64                              `json:"subtask_count,omitempty"`    // 该任务的子任务的个数。
	IsMilestone    bool                               `json:"is_milestone,omitempty"`     // 是否是里程碑任务
	CustomFields   []*GetTaskListRespItemCustomField  `json:"custom_fields,omitempty"`    // 任务的自定义字段值
	Dependencies   []*GetTaskListRespItemDependencie  `json:"dependencies,omitempty"`     // 任务依赖
}

// GetTaskListRespItemAttachment ...
type GetTaskListRespItemAttachment struct {
	Guid       string                                 `json:"guid,omitempty"`        // 附件guid
	FileToken  string                                 `json:"file_token,omitempty"`  // 附件在云文档系统中的token
	Name       string                                 `json:"name,omitempty"`        // 附件名
	Size       int64                                  `json:"size,omitempty"`        // 附件的字节大小
	Resource   *GetTaskListRespItemAttachmentResource `json:"resource,omitempty"`    // 附件归属的资源
	Uploader   *GetTaskListRespItemAttachmentUploader `json:"uploader,omitempty"`    // 附件上传者
	IsCover    bool                                   `json:"is_cover,omitempty"`    // 是否是封面图
	UploadedAt string                                 `json:"uploaded_at,omitempty"` // 上传时间戳(ms)
}

// GetTaskListRespItemAttachmentResource ...
type GetTaskListRespItemAttachmentResource struct {
	Type string `json:"type,omitempty"` // 资源类型
	ID   string `json:"id,omitempty"`   // 资源ID
}

// GetTaskListRespItemAttachmentUploader ...
type GetTaskListRespItemAttachmentUploader struct {
	ID   string `json:"id,omitempty"`   // 表示member的id
	Type string `json:"type,omitempty"` // 成员的类型
	Role string `json:"role,omitempty"` // 成员角色
}

// GetTaskListRespItemCreator ...
type GetTaskListRespItemCreator struct {
	ID   string `json:"id,omitempty"`   // 表示member的id
	Type string `json:"type,omitempty"` // 成员的类型
	Role string `json:"role,omitempty"` // 成员角色
}

// GetTaskListRespItemCustomComplete ...
type GetTaskListRespItemCustomComplete struct {
	Pc      *GetTaskListRespItemCustomCompletePc      `json:"pc,omitempty"`      // pc客户端自定义完成配置（含mac和windows）
	Ios     *GetTaskListRespItemCustomCompleteIos     `json:"ios,omitempty"`     // ios端的自定义完成配置
	Android *GetTaskListRespItemCustomCompleteAndroid `json:"android,omitempty"` // android端的自定义完成配置
}

// GetTaskListRespItemCustomCompleteAndroid ...
type GetTaskListRespItemCustomCompleteAndroid struct {
	Href string                                       `json:"href,omitempty"` // 自定义完成的跳转url
	Tip  *GetTaskListRespItemCustomCompleteAndroidTip `json:"tip,omitempty"`  // 自定义完成的弹出提示为
}

// GetTaskListRespItemCustomCompleteAndroidTip ...
type GetTaskListRespItemCustomCompleteAndroidTip struct {
	EnUs string `json:"en_us,omitempty"` // 英文
	ZhCn string `json:"zh_cn,omitempty"` // 中文
	ZhHk string `json:"zh_hk,omitempty"` // 中文（香港地区）
	ZhTw string `json:"zh_tw,omitempty"` // 中文（台湾地区）
	JaJp string `json:"ja_jp,omitempty"` // 日语
	FrFr string `json:"fr_fr,omitempty"` // 法语
	ItIt string `json:"it_it,omitempty"` // 意大利语
	DeDe string `json:"de_de,omitempty"` // 德语
	RuRu string `json:"ru_ru,omitempty"` // 俄语
	ThTh string `json:"th_th,omitempty"` // 泰语
	EsEs string `json:"es_es,omitempty"` // 西班牙语
	KoKr string `json:"ko_kr,omitempty"` // 韩语
}

// GetTaskListRespItemCustomCompleteIos ...
type GetTaskListRespItemCustomCompleteIos struct {
	Href string                                   `json:"href,omitempty"` // 自定义完成的跳转url
	Tip  *GetTaskListRespItemCustomCompleteIosTip `json:"tip,omitempty"`  // 自定义完成的弹出提示为
}

// GetTaskListRespItemCustomCompleteIosTip ...
type GetTaskListRespItemCustomCompleteIosTip struct {
	EnUs string `json:"en_us,omitempty"` // 英文
	ZhCn string `json:"zh_cn,omitempty"` // 中文
	ZhHk string `json:"zh_hk,omitempty"` // 中文（香港地区）
	ZhTw string `json:"zh_tw,omitempty"` // 中文（台湾地区）
	JaJp string `json:"ja_jp,omitempty"` // 日语
	FrFr string `json:"fr_fr,omitempty"` // 法语
	ItIt string `json:"it_it,omitempty"` // 意大利语
	DeDe string `json:"de_de,omitempty"` // 德语
	RuRu string `json:"ru_ru,omitempty"` // 俄语
	ThTh string `json:"th_th,omitempty"` // 泰语
	EsEs string `json:"es_es,omitempty"` // 西班牙语
	KoKr string `json:"ko_kr,omitempty"` // 韩语
}

// GetTaskListRespItemCustomCompletePc ...
type GetTaskListRespItemCustomCompletePc struct {
	Href string                                  `json:"href,omitempty"` // 自定义完成的跳转url
	Tip  *GetTaskListRespItemCustomCompletePcTip `json:"tip,omitempty"`  // 自定义完成的弹出提示为
}

// GetTaskListRespItemCustomCompletePcTip ...
type GetTaskListRespItemCustomCompletePcTip struct {
	EnUs string `json:"en_us,omitempty"` // 英文
	ZhCn string `json:"zh_cn,omitempty"` // 中文
	ZhHk string `json:"zh_hk,omitempty"` // 中文（香港地区）
	ZhTw string `json:"zh_tw,omitempty"` // 中文（台湾地区）
	JaJp string `json:"ja_jp,omitempty"` // 日语
	FrFr string `json:"fr_fr,omitempty"` // 法语
	ItIt string `json:"it_it,omitempty"` // 意大利语
	DeDe string `json:"de_de,omitempty"` // 德语
	RuRu string `json:"ru_ru,omitempty"` // 俄语
	ThTh string `json:"th_th,omitempty"` // 泰语
	EsEs string `json:"es_es,omitempty"` // 西班牙语
	KoKr string `json:"ko_kr,omitempty"` // 韩语
}

// GetTaskListRespItemCustomField ...
type GetTaskListRespItemCustomField struct {
	Guid              string                                       `json:"guid,omitempty"`                // 字段GUID
	Type              string                                       `json:"type,omitempty"`                // 自定义字段类型, 支持"member", "datetime", "number", "single_select", "multi_select"五种类型
	NumberValue       string                                       `json:"number_value,omitempty"`        // 数字类型的自定义字段值, 填写一个合法数字的字符串表示, 空字符串表示设为空。
	DatetimeValue     string                                       `json:"datetime_value,omitempty"`      // 日期类型自定义字段值。可以输入一个表示日期的以毫秒为单位的字符串。设为空字符串表示设为空。
	MemberValue       []*GetTaskListRespItemCustomFieldMemberValue `json:"member_value,omitempty"`        // 人员类型的自定义字段值, 可以设置1个或多个用户的id（遵循member格式, 只支持user类型）。当该字段的设置为“不能多选”时只能输入一个值。设为空数组表示设为空。
	SingleSelectValue string                                       `json:"single_select_value,omitempty"` // 单选类型字段值, 填写一个字段选项的option_guid。设置为空字符串表示设为空。
	MultiSelectValue  []string                                     `json:"multi_select_value,omitempty"`  // 多选类型字段值, 可以填写一个或多个本字段的option_guid。设为空数组表示设为空。
	Name              string                                       `json:"name,omitempty"`                // 自定义字段名
}

// GetTaskListRespItemCustomFieldMemberValue ...
type GetTaskListRespItemCustomFieldMemberValue struct {
	ID   string `json:"id,omitempty"`   // 表示member的id
	Type string `json:"type,omitempty"` // 成员的类型
	Role string `json:"role,omitempty"` // 成员角色
}

// GetTaskListRespItemDependencie ...
type GetTaskListRespItemDependencie struct {
	Type     string `json:"type,omitempty"`      // 依赖类型, 可选值有: prev: 前置依赖, next: 后置依赖
	TaskGuid string `json:"task_guid,omitempty"` // 依赖任务的GUID
}

// GetTaskListRespItemDue ...
type GetTaskListRespItemDue struct {
	Timestamp string `json:"timestamp,omitempty"`  // 截止时间/日期的时间戳, 距1970-01-01 00:00:00 UTC的毫秒数。如果截止时间是一个日期, 需要把日期转换成时间戳, 并设置 is_all_day=true
	IsAllDay  bool   `json:"is_all_day,omitempty"` // 是否截止到一个日期。如果设为true, timestamp中只有日期的部分会被解析和存储。
}

// GetTaskListRespItemMember ...
type GetTaskListRespItemMember struct {
	ID   string `json:"id,omitempty"`   // 表示member的id
	Type string `json:"type,omitempty"` // 成员的类型
	Role string `json:"role,omitempty"` // 成员角色
}

// GetTaskListRespItemOrigin ...
type GetTaskListRespItemOrigin struct {
	PlatformI18nName *GetTaskListRespItemOriginPlatformI18nName `json:"platform_i18n_name,omitempty"` // 任务导入来源的名称, 用于在任务中心详情页展示。需提供多语言版本。
	Href             *GetTaskListRespItemOriginHref             `json:"href,omitempty"`               // 任务关联的来源平台详情页链接
}

// GetTaskListRespItemOriginHref ...
type GetTaskListRespItemOriginHref struct {
	URL   string `json:"url,omitempty"`   // 链接对应的地址
	Title string `json:"title,omitempty"` // 链接对应的标题
}

// GetTaskListRespItemOriginPlatformI18nName ...
type GetTaskListRespItemOriginPlatformI18nName struct {
	EnUs string `json:"en_us,omitempty"` // 英文
	ZhCn string `json:"zh_cn,omitempty"` // 中文
	ZhHk string `json:"zh_hk,omitempty"` // 中文（香港地区）
	ZhTw string `json:"zh_tw,omitempty"` // 中文（台湾地区）
	JaJp string `json:"ja_jp,omitempty"` // 日语
	FrFr string `json:"fr_fr,omitempty"` // 法语
	ItIt string `json:"it_it,omitempty"` // 意大利语
	DeDe string `json:"de_de,omitempty"` // 德语
	RuRu string `json:"ru_ru,omitempty"` // 俄语
	ThTh string `json:"th_th,omitempty"` // 泰语
	EsEs string `json:"es_es,omitempty"` // 西班牙语
	KoKr string `json:"ko_kr,omitempty"` // 韩语
}

// GetTaskListRespItemReminder ...
type GetTaskListRespItemReminder struct {
	ID                 string `json:"id,omitempty"`                   // 提醒时间设置的 ID
	RelativeFireMinute int64  `json:"relative_fire_minute,omitempty"` // 相对于截止时间的提醒时间分钟数。例如30表示截止时间前30分钟提醒；0表示截止时提醒。
}

// GetTaskListRespItemStart ...
type GetTaskListRespItemStart struct {
	Timestamp string `json:"timestamp,omitempty"`  // 开始时间/日期的时间戳, 距1970-01-01 00:00:00的毫秒数。如果开始时间是一个日期, 需要把日期转换成时间戳, 并设置 is_all_day=true
	IsAllDay  bool   `json:"is_all_day,omitempty"` // 是否开始于一个日期。如果设为true, timestamp中只有日期的部分会被解析和存储。
}

// GetTaskListRespItemTasklist ...
type GetTaskListRespItemTasklist struct {
	TasklistGuid string `json:"tasklist_guid,omitempty"` // 任务所在清单的guid
	SectionGuid  string `json:"section_guid,omitempty"`  // 任务所在清单的自定义分组guid
}

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