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

// GetTaskTasklistActivitySubscription 提供一个清单的GUID和一个订阅的GUID, 获取该订阅的详细信息, 包括名称, 订阅者, 可通知的event key列表等。
//
// 获取动态订阅需要该清单的读取权限。
//
// doc: https://open.larkoffice.com/document/uAjLw4CM/ukTMukTMukTM/task-v2/tasklist-activity_subscription/get
func (r *TaskService) GetTaskTasklistActivitySubscription(ctx context.Context, request *GetTaskTasklistActivitySubscriptionReq, options ...MethodOptionFunc) (*GetTaskTasklistActivitySubscriptionResp, *Response, error) {
	if r.cli.mock.mockTaskGetTaskTasklistActivitySubscription != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Task#GetTaskTasklistActivitySubscription mock enable")
		return r.cli.mock.mockTaskGetTaskTasklistActivitySubscription(ctx, request, options...)
	}

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

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

// MockTaskGetTaskTasklistActivitySubscription mock TaskGetTaskTasklistActivitySubscription method
func (r *Mock) MockTaskGetTaskTasklistActivitySubscription(f func(ctx context.Context, request *GetTaskTasklistActivitySubscriptionReq, options ...MethodOptionFunc) (*GetTaskTasklistActivitySubscriptionResp, *Response, error)) {
	r.mockTaskGetTaskTasklistActivitySubscription = f
}

// UnMockTaskGetTaskTasklistActivitySubscription un-mock TaskGetTaskTasklistActivitySubscription method
func (r *Mock) UnMockTaskGetTaskTasklistActivitySubscription() {
	r.mockTaskGetTaskTasklistActivitySubscription = nil
}

// GetTaskTasklistActivitySubscriptionReq ...
type GetTaskTasklistActivitySubscriptionReq struct {
	TasklistGuid             string  `path:"tasklist_guid" json:"-"`              // 清单GUID。可以通过[创建清单](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/task-v2/tasklist/create), 或者通过[获取清单列表](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/task-v2/tasklist/list)接口查询得到, 示例值: "33991879-704f-444f-81d7-55a6aa7be80c"
	ActivitySubscriptionGuid string  `path:"activity_subscription_guid" json:"-"` // 订阅GUID。可以通过[创建动态订阅](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/task-v2/tasklist-activity_subscription/create)接口创建, 或者通过[列取动态订阅](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/task-v2/tasklist-activity_subscription/list)查询得到, 示例值: "33991879-704f-444f-81d7-55a6aa7be80c"
	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), 默认值: `open_id`, 当值为 `user_id`, 字段权限要求: 获取用户 user ID
}

// GetTaskTasklistActivitySubscriptionResp ...
type GetTaskTasklistActivitySubscriptionResp struct {
	ActivitySubscription *GetTaskTasklistActivitySubscriptionRespActivitySubscription `json:"activity_subscription,omitempty"` // 订阅详情
}

// GetTaskTasklistActivitySubscriptionRespActivitySubscription ...
type GetTaskTasklistActivitySubscriptionRespActivitySubscription struct {
	Guid        string                                                                   `json:"guid,omitempty"`         // 订阅guid
	Name        string                                                                   `json:"name,omitempty"`         // 订阅名称
	Subscribers []*GetTaskTasklistActivitySubscriptionRespActivitySubscriptionSubscriber `json:"subscribers,omitempty"`  // 订阅者
	IncludeKeys []int64                                                                  `json:"include_keys,omitempty"` // 要订阅的清单动态类型
	Disabled    bool                                                                     `json:"disabled,omitempty"`     // 该订阅是否为停用
}

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

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