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

// CreateCoreHRLocation 创建地点。
//
// doc: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/corehr-v1/location/create
// new doc: https://open.feishu.cn/document/server-docs/corehr-v1/organization-management/location/create
func (r *CoreHRService) CreateCoreHRLocation(ctx context.Context, request *CreateCoreHRLocationReq, options ...MethodOptionFunc) (*CreateCoreHRLocationResp, *Response, error) {
	if r.cli.mock.mockCoreHRCreateCoreHRLocation != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] CoreHR#CreateCoreHRLocation mock enable")
		return r.cli.mock.mockCoreHRCreateCoreHRLocation(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "CoreHR",
		API:                   "CreateCoreHRLocation",
		Method:                "POST",
		URL:                   r.cli.openBaseURL + "/open-apis/corehr/v1/locations",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
	}
	resp := new(createCoreHRLocationResp)

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

// MockCoreHRCreateCoreHRLocation mock CoreHRCreateCoreHRLocation method
func (r *Mock) MockCoreHRCreateCoreHRLocation(f func(ctx context.Context, request *CreateCoreHRLocationReq, options ...MethodOptionFunc) (*CreateCoreHRLocationResp, *Response, error)) {
	r.mockCoreHRCreateCoreHRLocation = f
}

// UnMockCoreHRCreateCoreHRLocation un-mock CoreHRCreateCoreHRLocation method
func (r *Mock) UnMockCoreHRCreateCoreHRLocation() {
	r.mockCoreHRCreateCoreHRLocation = nil
}

// CreateCoreHRLocationReq ...
type CreateCoreHRLocationReq struct {
	ClientToken        *string                                  `query:"client_token" json:"-"`          // 根据client_token是否一致来判断是否为同一请求, 示例值: 12454646
	HiberarchyCommon   *CreateCoreHRLocationReqHiberarchyCommon `json:"hiberarchy_common,omitempty"`     // 层级关系, 内层字段见实体
	LocationUsageList  []*CreateCoreHRLocationReqLocationUsage  `json:"location_usage_list,omitempty"`   // 地点用途
	Address            []*CreateCoreHRLocationReqAddres         `json:"address,omitempty"`               // 地址
	WorkingHoursTypeID *string                                  `json:"working_hours_type_id,omitempty"` // 工时制度, 示例值: "4690238309151997779"
	EffectiveTime      string                                   `json:"effective_time,omitempty"`        // 生效时间, 示例值: "2020-05-01 00:00:00"
	ExpirationTime     *string                                  `json:"expiration_time,omitempty"`       // 失效时间, 示例值: "2020-05-02 00:00:00"
	CustomFields       []*CreateCoreHRLocationReqCustomField    `json:"custom_fields,omitempty"`         // 自定义字段
	Locale             *CreateCoreHRLocationReqLocale           `json:"locale,omitempty"`                // 区域设置, 示例值: zh_cn
	TimeZoneID         *string                                  `json:"time_zone_id,omitempty"`          // 时区, 示例值: "123456789"
	DisplayLanguageID  *string                                  `json:"display_language_id,omitempty"`   // 默认显示语言, 示例值: "123456789"
}

// CreateCoreHRLocationReqAddres ...
type CreateCoreHRLocationReqAddres struct {
	CountryRegionID   string                                      `json:"country_region_id,omitempty"`   // 国家 / 地区, 示例值: "6862995757234914824"
	RegionID          *string                                     `json:"region_id,omitempty"`           // 主要行政区, 示例值: "6863326815667095047"
	CityID            *string                                     `json:"city_id,omitempty"`             // 城市, 该字段已作废, 请使用 city_id_v2 字段, 示例值: "6863333254578046471"
	DistinctID        *string                                     `json:"distinct_id,omitempty"`         // 区/县, 该字段已作废, 请使用 district_id_v2 字段, 示例值: "6863333516579440141"
	LocalAddressLine1 *string                                     `json:"local_address_line1,omitempty"` // 地址行 1（非拉丁语系的本地文字）, 示例值: "丹佛测试地址-纽埃时区"
	LocalAddressLine2 *string                                     `json:"local_address_line2,omitempty"` // 地址行 2（非拉丁语系的本地文字）, 示例值: "PoewH"
	LocalAddressLine3 *string                                     `json:"local_address_line3,omitempty"` // 地址行 3（非拉丁语系的本地文字）, 示例值: "PoewH"
	LocalAddressLine4 *string                                     `json:"local_address_line4,omitempty"` // 地址行 4（非拉丁语系的本地文字）, 示例值: "jmwJc"
	LocalAddressLine5 *string                                     `json:"local_address_line5,omitempty"` // 地址行 5（非拉丁语系的本地文字）, 示例值: "jmwJc"
	LocalAddressLine6 *string                                     `json:"local_address_line6,omitempty"` // 地址行 6（非拉丁语系的本地文字）, 示例值: "jmwJc"
	LocalAddressLine7 *string                                     `json:"local_address_line7,omitempty"` // 地址行 7（非拉丁语系的本地文字）, 示例值: "jmwJc"
	LocalAddressLine8 *string                                     `json:"local_address_line8,omitempty"` // 地址行 8（非拉丁语系的本地文字）, 示例值: "rafSu"
	LocalAddressLine9 *string                                     `json:"local_address_line9,omitempty"` // 地址行 9（非拉丁语系的本地文字）, 示例值: "McPRG"
	PostalCode        *string                                     `json:"postal_code,omitempty"`         // 邮政编码, 示例值: "611530"
	AddressTypeList   []*CreateCoreHRLocationReqAddresAddressType `json:"address_type_list,omitempty"`   // 地址类型
	IsPrimary         *bool                                       `json:"is_primary,omitempty"`          // 主要地址, 示例值: true
	IsPublic          *bool                                       `json:"is_public,omitempty"`           // 公开地址, 示例值: true
	CustomFields      []*CreateCoreHRLocationReqAddresCustomField `json:"custom_fields,omitempty"`       // 自定义字段
}

// CreateCoreHRLocationReqAddresAddressType ...
type CreateCoreHRLocationReqAddresAddressType struct {
	EnumName string `json:"enum_name,omitempty"` // 枚举值, 示例值: "phone_type"
}

// CreateCoreHRLocationReqAddresCustomField ...
type CreateCoreHRLocationReqAddresCustomField struct {
	FieldName string `json:"field_name,omitempty"` // 字段名, 示例值: "name"
	Value     string `json:"value,omitempty"`      // 字段值, 是json转义后的字符串, 根据元数据定义不同, 字段格式不同(123, 123.23, true, [\"id1\", \"id2\], 2006-01-02 15:04:05]), 示例值: "Sandy"
}

// CreateCoreHRLocationReqCustomField ...
type CreateCoreHRLocationReqCustomField struct {
	FieldName string `json:"field_name,omitempty"` // 字段名, 示例值: "name"
	Value     string `json:"value,omitempty"`      // 字段值, 是json转义后的字符串, 根据元数据定义不同, 字段格式不同(123, 123.23, true, [\"id1\", \"id2\], 2006-01-02 15:04:05]), 示例值: "Sandy"
}

// CreateCoreHRLocationReqHiberarchyCommon ...
type CreateCoreHRLocationReqHiberarchyCommon struct {
	ParentID       *string                                               `json:"parent_id,omitempty"`       // 上级组织, 示例值: "4719168654814483759"
	Name           []*CreateCoreHRLocationReqHiberarchyCommonName        `json:"name,omitempty"`            // 名称
	Type           *CreateCoreHRLocationReqHiberarchyCommonType          `json:"type,omitempty"`            // 组织类型
	Active         bool                                                  `json:"active,omitempty"`          // 启用, 示例值: true
	ExpirationTime *string                                               `json:"expiration_time,omitempty"` // 失效时间, 示例值: "2020-05-02 00:00:00"
	Code           *string                                               `json:"code,omitempty"`            // 编码, 示例值: "12456"
	Description    []*CreateCoreHRLocationReqHiberarchyCommonDescription `json:"description,omitempty"`     // 描述
	CustomFields   []*CreateCoreHRLocationReqHiberarchyCommonCustomField `json:"custom_fields,omitempty"`   // 自定义字段
}

// CreateCoreHRLocationReqHiberarchyCommonCustomField ...
type CreateCoreHRLocationReqHiberarchyCommonCustomField struct {
	FieldName string `json:"field_name,omitempty"` // 字段名, 示例值: "name"
	Value     string `json:"value,omitempty"`      // 字段值, 是json转义后的字符串, 根据元数据定义不同, 字段格式不同(123, 123.23, true, [\"id1\", \"id2\], 2006-01-02 15:04:05]), 示例值: "Sandy"
}

// CreateCoreHRLocationReqHiberarchyCommonDescription ...
type CreateCoreHRLocationReqHiberarchyCommonDescription struct {
	Lang  string `json:"lang,omitempty"`  // 语言, 示例值: "zh-CN"
	Value string `json:"value,omitempty"` // 内容, 示例值: "刘梓新"
}

// CreateCoreHRLocationReqHiberarchyCommonName ...
type CreateCoreHRLocationReqHiberarchyCommonName struct {
	Lang  string `json:"lang,omitempty"`  // 语言, 示例值: "zh-CN"
	Value string `json:"value,omitempty"` // 内容, 示例值: "刘梓新"
}

// CreateCoreHRLocationReqHiberarchyCommonType ...
type CreateCoreHRLocationReqHiberarchyCommonType struct {
	EnumName string `json:"enum_name,omitempty"` // 枚举值, 示例值: "phone_type"
}

// CreateCoreHRLocationReqLocale ...
type CreateCoreHRLocationReqLocale struct {
	EnumName string `json:"enum_name,omitempty"` // 枚举值, 示例值: "phone_type"
}

// CreateCoreHRLocationReqLocationUsage ...
type CreateCoreHRLocationReqLocationUsage struct {
	EnumName string `json:"enum_name,omitempty"` // 枚举值, 示例值: "phone_type"
}

// CreateCoreHRLocationResp ...
type CreateCoreHRLocationResp struct {
	Location *CreateCoreHRLocationRespLocation `json:"location,omitempty"` // 4718803945687580505
}

// CreateCoreHRLocationRespLocation ...
type CreateCoreHRLocationRespLocation struct {
	ID                 string                                            `json:"id,omitempty"`                    // 实体在CoreHR内部的唯一键
	HiberarchyCommon   *CreateCoreHRLocationRespLocationHiberarchyCommon `json:"hiberarchy_common,omitempty"`     // 层级关系, 内层字段见实体
	LocationUsageList  []*CreateCoreHRLocationRespLocationLocationUsage  `json:"location_usage_list,omitempty"`   // 地点用途
	Address            []*CreateCoreHRLocationRespLocationAddres         `json:"address,omitempty"`               // 地址
	WorkingHoursTypeID string                                            `json:"working_hours_type_id,omitempty"` // 工时制度
	EffectiveTime      string                                            `json:"effective_time,omitempty"`        // 生效时间
	ExpirationTime     string                                            `json:"expiration_time,omitempty"`       // 失效时间
	CustomFields       []*CreateCoreHRLocationRespLocationCustomField    `json:"custom_fields,omitempty"`         // 自定义字段
	Locale             *CreateCoreHRLocationRespLocationLocale           `json:"locale,omitempty"`                // 区域设置
	TimeZoneID         string                                            `json:"time_zone_id,omitempty"`          // 时区
	DisplayLanguageID  string                                            `json:"display_language_id,omitempty"`   // 默认显示语言
}

// CreateCoreHRLocationRespLocationAddres ...
type CreateCoreHRLocationRespLocationAddres struct {
	FullAddressLocalScript   string                                               `json:"full_address_local_script,omitempty"`   // 完整地址（本地文字）
	FullAddressWesternScript string                                               `json:"full_address_western_script,omitempty"` // 完整地址（西方文字）
	ID                       string                                               `json:"id,omitempty"`                          // 地址ID
	CountryRegionID          string                                               `json:"country_region_id,omitempty"`           // 国家 / 地区
	RegionID                 string                                               `json:"region_id,omitempty"`                   // 主要行政区
	CityID                   string                                               `json:"city_id,omitempty"`                     // 城市, 该字段已作废, 请使用 city_id_v2 字段
	DistinctID               string                                               `json:"distinct_id,omitempty"`                 // 区/县, 该字段已作废, 请使用 district_id_v2 字段
	LocalAddressLine1        string                                               `json:"local_address_line1,omitempty"`         // 地址行 1（非拉丁语系的本地文字）
	LocalAddressLine2        string                                               `json:"local_address_line2,omitempty"`         // 地址行 2（非拉丁语系的本地文字）
	LocalAddressLine3        string                                               `json:"local_address_line3,omitempty"`         // 地址行 3（非拉丁语系的本地文字）
	LocalAddressLine4        string                                               `json:"local_address_line4,omitempty"`         // 地址行 4（非拉丁语系的本地文字）
	LocalAddressLine5        string                                               `json:"local_address_line5,omitempty"`         // 地址行 5（非拉丁语系的本地文字）
	LocalAddressLine6        string                                               `json:"local_address_line6,omitempty"`         // 地址行 6（非拉丁语系的本地文字）
	LocalAddressLine7        string                                               `json:"local_address_line7,omitempty"`         // 地址行 7（非拉丁语系的本地文字）
	LocalAddressLine8        string                                               `json:"local_address_line8,omitempty"`         // 地址行 8（非拉丁语系的本地文字）
	LocalAddressLine9        string                                               `json:"local_address_line9,omitempty"`         // 地址行 9（非拉丁语系的本地文字）
	PostalCode               string                                               `json:"postal_code,omitempty"`                 // 邮政编码
	AddressTypeList          []*CreateCoreHRLocationRespLocationAddresAddressType `json:"address_type_list,omitempty"`           // 地址类型
	IsPrimary                bool                                                 `json:"is_primary,omitempty"`                  // 主要地址
	IsPublic                 bool                                                 `json:"is_public,omitempty"`                   // 公开地址
	CustomFields             []*CreateCoreHRLocationRespLocationAddresCustomField `json:"custom_fields,omitempty"`               // 自定义字段
}

// CreateCoreHRLocationRespLocationAddresAddressType ...
type CreateCoreHRLocationRespLocationAddresAddressType struct {
	EnumName string                                                      `json:"enum_name,omitempty"` // 枚举值
	Display  []*CreateCoreHRLocationRespLocationAddresAddressTypeDisplay `json:"display,omitempty"`   // 枚举多语展示
}

// CreateCoreHRLocationRespLocationAddresAddressTypeDisplay ...
type CreateCoreHRLocationRespLocationAddresAddressTypeDisplay struct {
	Lang  string `json:"lang,omitempty"`  // 语言
	Value string `json:"value,omitempty"` // 内容
}

// CreateCoreHRLocationRespLocationAddresCustomField ...
type CreateCoreHRLocationRespLocationAddresCustomField struct {
	FieldName string `json:"field_name,omitempty"` // 字段名
	Value     string `json:"value,omitempty"`      // 字段值, 是json转义后的字符串, 根据元数据定义不同, 字段格式不同(123, 123.23, true, [\"id1\", \"id2\], 2006-01-02 15:04:05])
}

// CreateCoreHRLocationRespLocationCustomField ...
type CreateCoreHRLocationRespLocationCustomField struct {
	FieldName string `json:"field_name,omitempty"` // 字段名
	Value     string `json:"value,omitempty"`      // 字段值, 是json转义后的字符串, 根据元数据定义不同, 字段格式不同(123, 123.23, true, [\"id1\", \"id2\], 2006-01-02 15:04:05])
}

// CreateCoreHRLocationRespLocationHiberarchyCommon ...
type CreateCoreHRLocationRespLocationHiberarchyCommon struct {
	ParentID       string                                                         `json:"parent_id,omitempty"`       // 上级组织
	Name           []*CreateCoreHRLocationRespLocationHiberarchyCommonName        `json:"name,omitempty"`            // 名称
	Type           *CreateCoreHRLocationRespLocationHiberarchyCommonType          `json:"type,omitempty"`            // 组织类型
	Active         bool                                                           `json:"active,omitempty"`          // 启用
	EffectiveTime  string                                                         `json:"effective_time,omitempty"`  // 生效时间
	ExpirationTime string                                                         `json:"expiration_time,omitempty"` // 失效时间
	Code           string                                                         `json:"code,omitempty"`            // 编码
	Description    []*CreateCoreHRLocationRespLocationHiberarchyCommonDescription `json:"description,omitempty"`     // 描述
	TreeOrder      string                                                         `json:"tree_order,omitempty"`      // 树形排序, 代表同层级的部门排序序号
	ListOrder      string                                                         `json:"list_order,omitempty"`      // 列表排序, 代表所有部门的混排序号
	CustomFields   []*CreateCoreHRLocationRespLocationHiberarchyCommonCustomField `json:"custom_fields,omitempty"`   // 自定义字段
}

// CreateCoreHRLocationRespLocationHiberarchyCommonCustomField ...
type CreateCoreHRLocationRespLocationHiberarchyCommonCustomField struct {
	FieldName string `json:"field_name,omitempty"` // 字段名
	Value     string `json:"value,omitempty"`      // 字段值, 是json转义后的字符串, 根据元数据定义不同, 字段格式不同(123, 123.23, true, [\"id1\", \"id2\], 2006-01-02 15:04:05])
}

// CreateCoreHRLocationRespLocationHiberarchyCommonDescription ...
type CreateCoreHRLocationRespLocationHiberarchyCommonDescription struct {
	Lang  string `json:"lang,omitempty"`  // 语言
	Value string `json:"value,omitempty"` // 内容
}

// CreateCoreHRLocationRespLocationHiberarchyCommonName ...
type CreateCoreHRLocationRespLocationHiberarchyCommonName struct {
	Lang  string `json:"lang,omitempty"`  // 语言
	Value string `json:"value,omitempty"` // 内容
}

// CreateCoreHRLocationRespLocationHiberarchyCommonType ...
type CreateCoreHRLocationRespLocationHiberarchyCommonType struct {
	EnumName string                                                         `json:"enum_name,omitempty"` // 枚举值
	Display  []*CreateCoreHRLocationRespLocationHiberarchyCommonTypeDisplay `json:"display,omitempty"`   // 枚举多语展示
}

// CreateCoreHRLocationRespLocationHiberarchyCommonTypeDisplay ...
type CreateCoreHRLocationRespLocationHiberarchyCommonTypeDisplay struct {
	Lang  string `json:"lang,omitempty"`  // 语言
	Value string `json:"value,omitempty"` // 内容
}

// CreateCoreHRLocationRespLocationLocale ...
type CreateCoreHRLocationRespLocationLocale struct {
	EnumName string                                           `json:"enum_name,omitempty"` // 枚举值
	Display  []*CreateCoreHRLocationRespLocationLocaleDisplay `json:"display,omitempty"`   // 枚举多语展示
}

// CreateCoreHRLocationRespLocationLocaleDisplay ...
type CreateCoreHRLocationRespLocationLocaleDisplay struct {
	Lang  string `json:"lang,omitempty"`  // 语言
	Value string `json:"value,omitempty"` // 内容
}

// CreateCoreHRLocationRespLocationLocationUsage ...
type CreateCoreHRLocationRespLocationLocationUsage struct {
	EnumName string                                                  `json:"enum_name,omitempty"` // 枚举值
	Display  []*CreateCoreHRLocationRespLocationLocationUsageDisplay `json:"display,omitempty"`   // 枚举多语展示
}

// CreateCoreHRLocationRespLocationLocationUsageDisplay ...
type CreateCoreHRLocationRespLocationLocationUsageDisplay struct {
	Lang  string `json:"lang,omitempty"`  // 语言
	Value string `json:"value,omitempty"` // 内容
}

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