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

// GetTaskAttachmentList 列取一个资源的所有附件。返回的附件列表支持分页, 按照附件上传时间排序。
//
// 每个附件会返回一个可供下载的临时url, 有效期为3分钟, 最多可以支持3次下载。如果超过使用限制, 需要通过本接口获取新的临时url。
// 获取任务的附件列表, 需要该任务的读取权限。
//
// doc: https://open.larkoffice.com/document/uAjLw4CM/ukTMukTMukTM/task-v2/attachment/list
func (r *TaskService) GetTaskAttachmentList(ctx context.Context, request *GetTaskAttachmentListReq, options ...MethodOptionFunc) (*GetTaskAttachmentListResp, *Response, error) {
	if r.cli.mock.mockTaskGetTaskAttachmentList != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Task#GetTaskAttachmentList mock enable")
		return r.cli.mock.mockTaskGetTaskAttachmentList(ctx, request, options...)
	}

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

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

// MockTaskGetTaskAttachmentList mock TaskGetTaskAttachmentList method
func (r *Mock) MockTaskGetTaskAttachmentList(f func(ctx context.Context, request *GetTaskAttachmentListReq, options ...MethodOptionFunc) (*GetTaskAttachmentListResp, *Response, error)) {
	r.mockTaskGetTaskAttachmentList = f
}

// UnMockTaskGetTaskAttachmentList un-mock TaskGetTaskAttachmentList method
func (r *Mock) UnMockTaskGetTaskAttachmentList() {
	r.mockTaskGetTaskAttachmentList = nil
}

// GetTaskAttachmentListReq ...
type GetTaskAttachmentListReq struct {
	PageSize     *int64  `query:"page_size" json:"-"`     // 分页大小, 示例值: 50, 默认值: `50`, 取值范围: `1` ～ `100`
	PageToken    *string `query:"page_token" json:"-"`    // 分页标记, 第一次请求不填, 表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token, 下次遍历可采用该 page_token 获取查询结果, 示例值: aWQ9NzEwMjMzMjMxMDE=
	ResourceType *string `query:"resource_type" json:"-"` // 附件归属的资源类型。目前只支持"task", 示例值: task, 默认值: `task`
	ResourceID   string  `query:"resource_id" json:"-"`   // 附件归属资源的id, 配合resource_type使用。例如希望获取任务的附件, 需要设置 resource_type为task, resource_id为任务GUID。任务GUID的获取方式可以参考[任务功能概述](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/task-v2/task/overview), 示例值: 9842501a-9f47-4ff5-a622-d319eeecb97f
	UserIDType   *IDType `query:"user_id_type" json:"-"`  // 用户 ID 类型, 示例值: open_id, 默认值: `open_id`
}

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

// GetTaskAttachmentListRespItem ...
type GetTaskAttachmentListRespItem 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   *GetTaskAttachmentListRespItemResource `json:"resource,omitempty"`    // 附件归属的资源
	Uploader   *GetTaskAttachmentListRespItemUploader `json:"uploader,omitempty"`    // 附件上传者
	IsCover    bool                                   `json:"is_cover,omitempty"`    // 是否是封面图
	UploadedAt string                                 `json:"uploaded_at,omitempty"` // 上传时间戳(ms)
	URL        string                                 `json:"url,omitempty"`         // 附件的临时下载url, 有效时间3分钟, 且只允许调用3次进行附件下载。
}

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

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

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