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

// BatchSendOldRawMessage 给多个用户或者多个部门中的成员发送消息。
//
// 注意事项:
// - 应用需要启用[机器人能力](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-enable-bot-ability)
// - 接口权限说明:
// --必须拥有获取与发送单聊、群组消息权限, 或者以应用的身份发消息权限
// --至少拥有一个批量发送消息权限:
// --给用户发送需要拥有 给多个用户批量发消息 权限
// --给部门成员发送需要拥有 给一个或多个部门的成员批量发消息 权限
// - 应用需要拥有对所发送用户或部门的[可用性](https://open.feishu.cn/document/home/introduction-to-scope-and-authorization/availability)
// - 通过该接口发送的消息 不支持更新以及回复等操作
// - 只能发送给用户, 无法发送给群组
// - 异步接口, 会有一定延迟, 每个应用待发送的消息按顺序处理, 请合理安排批量发送范围和顺序。发送消息给单个用户的场景请使用[发送消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/create)接口
// - 单个应用每天通过该接口发送的总消息条数不超过50万
//
// doc: https://open.feishu.cn/document/ukTMukTMukTM/ucDO1EjL3gTNx4yN4UTM
// new doc: https://open.feishu.cn/document/server-docs/im-v1/batch_message/send-messages-in-batches
func (r *MessageService) BatchSendOldRawMessage(ctx context.Context, request *BatchSendOldRawMessageReq, options ...MethodOptionFunc) (*BatchSendOldRawMessageResp, *Response, error) {
	if r.cli.mock.mockMessageBatchSendOldRawMessage != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Message#BatchSendOldRawMessage mock enable")
		return r.cli.mock.mockMessageBatchSendOldRawMessage(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "Message",
		API:                   "BatchSendOldRawMessage",
		Method:                "POST",
		URL:                   r.cli.openBaseURL + "/open-apis/message/v4/batch_send/",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
	}
	resp := new(batchSendOldRawMessageResp)

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

// MockMessageBatchSendOldRawMessage mock MessageBatchSendOldRawMessage method
func (r *Mock) MockMessageBatchSendOldRawMessage(f func(ctx context.Context, request *BatchSendOldRawMessageReq, options ...MethodOptionFunc) (*BatchSendOldRawMessageResp, *Response, error)) {
	r.mockMessageBatchSendOldRawMessage = f
}

// UnMockMessageBatchSendOldRawMessage un-mock MessageBatchSendOldRawMessage method
func (r *Mock) UnMockMessageBatchSendOldRawMessage() {
	r.mockMessageBatchSendOldRawMessage = nil
}

// BatchSendOldRawMessageReq ...
type BatchSendOldRawMessageReq struct {
	MsgType       MsgType     `json:"msg_type,omitempty"`       // 消息类型, 支持多种消息类型, 详见[消息类型及内容示例](	/ssl:ttdoc/ukTMukTMukTM/ucDO1EjL3gTNx4yN4UTM#42562565)
	Content       interface{} `json:"content,omitempty"`        // 消息内容, 支持除卡片消息外的多种消息内容, 详见[消息类型及内容示例](	/ssl:ttdoc/ukTMukTMukTM/ucDO1EjL3gTNx4yN4UTM#42562565)
	Card          interface{} `json:"card,omitempty"`           // 卡片消息内容   注意: card和content字段必须二选一
	DepartmentIDs []string    `json:"department_ids,omitempty"` // 支持[自定义部门ID](https://open.feishu.cn/document/ukTMukTMukTM/uYTM5UjL2ETO14iNxkTN/terminology#3c3e6267)和open_department_id, 列表长度小于等于 200    注意: 部门下的所有子部门包含的成员也会收到消息  示例值: ["3dceba33a33226", "d502aaa9514059", "od-5b91c9affb665451a16b90b4be367efa"]
	OpenIDs       []string    `json:"open_ids,omitempty"`       // 用户 open_id 列表, 长度小于等于 200；ID获取方式可参考文档[如何获取 Open ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-openid)   示例值: ["ou_18eac85d35a26f989317ad4f02e8bbbb", "ou_461cf042d9eedaa60d445f26dc747d5e"]
	UserIDs       []string    `json:"user_ids,omitempty"`       // 用户 user_id 列表, 长度小于等于 200；ID获取方式可参考文档[如何获取 User ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-user-id)  （对应 V3 接口的 employee_ids ）  示例值: ["7cdcc7c2", "ca51d83b"]
	UnionIDs      []string    `json:"union_ids,omitempty"`      // 用户 union_ids 列表, 长度小于等于 200；ID获取方式可参考文档[如何获取 Union ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-union-id)    示例值: ["on_cad4860e7af114fb4ff6c5d496d1dd76", "on_gdcq860e7af114fb4ff6c5d496dabcet"]
}

// BatchSendOldRawMessageResp ...
type BatchSendOldRawMessageResp struct {
	MessageID            string   `json:"message_id,omitempty"`             // 批量消息 ID
	InvalidDepartmentIDs []string `json:"invalid_department_ids,omitempty"` // 不合法的部门 ID 列表
	InvalidOpenIDs       []string `json:"invalid_open_ids,omitempty"`       // 不合法的 open_id 列表
	InvalidUserIDs       []string `json:"invalid_user_ids,omitempty"`       // 不合法的 user_id 列表（对应V3接口的invalid_employee_ids）
	InvalidUnionIDs      []string `json:"invalid_union_ids,omitempty"`      // 不合法的 union_id 列表
}

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