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

// CreateTaskComment 为一个任务创建评论, 或者回复该任务的某个评论。
//
// 若要创建一个回复评论, 需要在创建时设置`reply_to_comment_id`字段。被回复的评论和新建的评论必须属于同一个任务。
// 对任务进行评论时需要评论的读取权限。详情见[清单功能概述](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/task-v2/tasklist/overview)中的“清单是如何鉴权的？“章节。
//
// doc: https://open.larkoffice.com/document/uAjLw4CM/ukTMukTMukTM/task-v2/comment/create
func (r *TaskService) CreateTaskComment(ctx context.Context, request *CreateTaskCommentReq, options ...MethodOptionFunc) (*CreateTaskCommentResp, *Response, error) {
	if r.cli.mock.mockTaskCreateTaskComment != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Task#CreateTaskComment mock enable")
		return r.cli.mock.mockTaskCreateTaskComment(ctx, request, options...)
	}

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

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

// MockTaskCreateTaskComment mock TaskCreateTaskComment method
func (r *Mock) MockTaskCreateTaskComment(f func(ctx context.Context, request *CreateTaskCommentReq, options ...MethodOptionFunc) (*CreateTaskCommentResp, *Response, error)) {
	r.mockTaskCreateTaskComment = f
}

// UnMockTaskCreateTaskComment un-mock TaskCreateTaskComment method
func (r *Mock) UnMockTaskCreateTaskComment() {
	r.mockTaskCreateTaskComment = nil
}

// CreateTaskCommentReq ...
type CreateTaskCommentReq struct {
	UserIDType       *IDType `query:"user_id_type" json:"-"`        // 用户 ID 类型, 示例值: open_id, 默认值: `open_id`
	Content          string  `json:"content,omitempty"`             // 评论内容。不允许为空, 最长3000个utf8字符, 示例值: "这是一条评论。"
	ReplyToCommentID *string `json:"reply_to_comment_id,omitempty"` // 回复给评论的评论ID。如果不填写表示创建非回复评论, 示例值: "6937231762296684564", 最大长度: `20` 字符
	ResourceType     *string `json:"resource_type,omitempty"`       // 评论归属的资源类型, 目前只支持任务“task”, 默认为"task", 示例值: "task", 默认值: `task`
	ResourceID       *string `json:"resource_id,omitempty"`         // 评论归属的资源ID。当归属资源类型为"task"时, 这里应填写任务的GUID, 示例值: "ccb55625-95d2-2e80-655f-0e40bf67953f", 最大长度: `100` 字符
}

// CreateTaskCommentResp ...
type CreateTaskCommentResp struct {
	Comment *CreateTaskCommentRespComment `json:"comment,omitempty"` // 创建的评论详情
}

// CreateTaskCommentRespComment ...
type CreateTaskCommentRespComment struct {
	ID               string                               `json:"id,omitempty"`                  // 评论id
	Content          string                               `json:"content,omitempty"`             // 评论内容
	Creator          *CreateTaskCommentRespCommentCreator `json:"creator,omitempty"`             // 评论创建人
	ReplyToCommentID string                               `json:"reply_to_comment_id,omitempty"` // 评论回复评论的id。如果不是回复评论, 则为空。
	CreatedAt        string                               `json:"created_at,omitempty"`          // 评论创建时间戳（ms)
	UpdatedAt        string                               `json:"updated_at,omitempty"`          // 评论更新时间戳（ms）
	ResourceType     string                               `json:"resource_type,omitempty"`       // 任务关联的资源类型
	ResourceID       string                               `json:"resource_id,omitempty"`         // 任务关联的资源ID
}

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

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