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

// GetDepartmentListOld 该接口用于获取当前部门子部门列表。[常见问题答疑](https://open.feishu.cn/document/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
//
// - 使用 user_access_token 时, 返回该用户组织架构可见性范围（[登陆企业管理后台进行权限配置](https://www.feishu.cn/admin/security/permission/visibility)）内的所有可见部门。当进行递归查询时, 只筛查最多1000个部门的可见性。
// - 使用
// tenant_access_token 则基于应用的通讯录权限范围进行权限校验与过滤。由于
// parent_department_id 是非必填参数, 填与不填存在<b>两种数据权限校验与返回</b>情况:
// - 、请求设置了
// parent_department_id 为A（根部门0）, 会检验A是否在通讯录权限内, 若在( parent_department_id=0 时会校验是否为全员权限）, 则返回部门下子部门列表（根据fetch_child决定是否递归）, 否则返回无部门通讯录权限错误码。
// - 、请求未带
// parent_department_id 参数, 如通讯录范围为全员权限, 只返回根部门ID(部门ID为0), 否则返回根据通讯录范围配置的部门ID及子部门(根据
// fetch_child 决定是否递归)。
//
// doc: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/list
// new doc: https://open.feishu.cn/document/server-docs/historic-version//department/list
//
// Deprecated
func (r *ContactService) GetDepartmentListOld(ctx context.Context, request *GetDepartmentListOldReq, options ...MethodOptionFunc) (*GetDepartmentListOldResp, *Response, error) {
	if r.cli.mock.mockContactGetDepartmentListOld != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Contact#GetDepartmentListOld mock enable")
		return r.cli.mock.mockContactGetDepartmentListOld(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "Contact",
		API:                   "GetDepartmentListOld",
		Method:                "GET",
		URL:                   r.cli.openBaseURL + "/open-apis/contact/v3/departments",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
		NeedUserAccessToken:   true,
	}
	resp := new(getDepartmentListOldResp)

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

// MockContactGetDepartmentListOld mock ContactGetDepartmentListOld method
func (r *Mock) MockContactGetDepartmentListOld(f func(ctx context.Context, request *GetDepartmentListOldReq, options ...MethodOptionFunc) (*GetDepartmentListOldResp, *Response, error)) {
	r.mockContactGetDepartmentListOld = f
}

// UnMockContactGetDepartmentListOld un-mock ContactGetDepartmentListOld method
func (r *Mock) UnMockContactGetDepartmentListOld() {
	r.mockContactGetDepartmentListOld = nil
}

// GetDepartmentListOldReq ...
type GetDepartmentListOldReq struct {
	UserIDType         *IDType           `query:"user_id_type" json:"-"`         // 用户 ID 类型, 示例值: "open_id", 可选值有: `open_id`: 用户的 open id, `union_id`: 用户的 union id, `user_id`: 用户的 user id, 默认值: `open_id`, 当值为 `user_id`, 字段权限要求: 获取用户 user ID
	DepartmentIDType   *DepartmentIDType `query:"department_id_type" json:"-"`   // 此次调用中使用的部门ID的类型, 示例值: "open_department_id", 可选值有: `department_id`: 以自定义department_id来标识部门, `open_department_id`: 以open_department_id来标识部门, 默认值: `open_department_id`
	ParentDepartmentID *string           `query:"parent_department_id" json:"-"` // 父部门的ID, 填上获取部门下所有子部门, 此处填写的 ID 必须是 department_id_type 指定的 ID, 示例值: "od-4e6ac4d14bcd5071a37a39de902c7141"
	FetchChild         *bool             `query:"fetch_child" json:"-"`          // 是否递归获取子部门, 示例值: 是否递归获取子部门, 默认值: false
	PageToken          *string           `query:"page_token" json:"-"`           // 分页标记, 第一次请求不填, 表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token, 下次遍历可采用该 page_token 获取查询结果, 示例值: "AQD9/Rn9eij9Pm39ED40/RD/cIFmu77WxpxPB/2oHfQLZ%2BG8JG6tK7%2BZnHiT7COhD2hMSICh/eBl7cpzU6JEC3J7COKNe4jrQ8ExwBCR"
	PageSize           *int64            `query:"page_size" json:"-"`            // 分页大小, 示例值: 10, 最大值: `50`
}

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

// GetDepartmentListOldRespItem ...
type GetDepartmentListOldRespItem struct {
	Name               string                                `json:"name,omitempty"`                 // 部门名称, 注意: 不可包含斜杠, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门基础信息, 读取通讯录, 以应用身份访问通讯录
	I18nName           *GetDepartmentListOldRespItemI18nName `json:"i18n_name,omitempty"`            // 国际化的部门名称, 注意: 不可包含斜杠, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门基础信息, 读取通讯录, 以应用身份访问通讯录
	ParentDepartmentID string                                `json:"parent_department_id,omitempty"` // 父部门的ID, * 在根部门下创建新部门, 该参数值为 “0”, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门组织架构信息, 读取通讯录, 以应用身份访问通讯录
	DepartmentID       string                                `json:"department_id,omitempty"`        // 本部门的自定义部门ID, 注意: 除需要满足正则规则外, 同时不能以`od-`开头, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门基础信息, 读取通讯录, 以应用身份访问通讯录
	OpenDepartmentID   string                                `json:"open_department_id,omitempty"`   // 部门的open_id, 类型与通过请求的查询参数传入的department_id_type相同
	LeaderUserID       string                                `json:"leader_user_id,omitempty"`       // 部门主管用户ID, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门组织架构信息, 读取通讯录, 以应用身份访问通讯录
	ChatID             string                                `json:"chat_id,omitempty"`              // 部门群ID, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门基础信息, 读取通讯录, 以应用身份访问通讯录
	Order              string                                `json:"order,omitempty"`                // 部门的排序, 即部门在其同级部门的展示顺序, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门组织架构信息, 读取通讯录, 以应用身份访问通讯录
	UnitIDs            []string                              `json:"unit_ids,omitempty"`             // 部门单位自定义ID列表, 当前只支持一个, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门组织架构信息, 读取通讯录, 以应用身份访问通讯录
	MemberCount        int64                                 `json:"member_count,omitempty"`         // 部门下用户的个数, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门组织架构信息, 读取通讯录, 以应用身份访问通讯录
	Status             *GetDepartmentListOldRespItemStatus   `json:"status,omitempty"`               // 部门状态, 字段权限要求（满足任一）: 以应用身份读取通讯录, 获取部门基础信息, 读取通讯录, 以应用身份访问通讯录
}

// GetDepartmentListOldRespItemI18nName ...
type GetDepartmentListOldRespItemI18nName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 部门的中文名
	JaJp string `json:"ja_jp,omitempty"` // 部门的日文名
	EnUs string `json:"en_us,omitempty"` // 部门的英文名
}

// GetDepartmentListOldRespItemStatus ...
type GetDepartmentListOldRespItemStatus struct {
	IsDeleted bool `json:"is_deleted,omitempty"` // 是否被删除
}

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