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

// CreateBitableTable 通过该接口, 可以新增一个仅包含索引列的空数据表, 也可以指定一部分初始字段。
//
// ::: note
// 首次调用请参考 [云文档接口快速入门](https://open.feishu.cn/document/ukTMukTMukTM/uczNzUjL3czM14yN3MTN)[多维表格接口接入指南](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/bitable/notification)
//
// doc: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/bitable-v1/app-table/create
// new doc: https://open.feishu.cn/document/server-docs/docs/bitable-v1/app-table/create
func (r *BitableService) CreateBitableTable(ctx context.Context, request *CreateBitableTableReq, options ...MethodOptionFunc) (*CreateBitableTableResp, *Response, error) {
	if r.cli.mock.mockBitableCreateBitableTable != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Bitable#CreateBitableTable mock enable")
		return r.cli.mock.mockBitableCreateBitableTable(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "Bitable",
		API:                   "CreateBitableTable",
		Method:                "POST",
		URL:                   r.cli.openBaseURL + "/open-apis/bitable/v1/apps/:app_token/tables",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
		NeedUserAccessToken:   true,
	}
	resp := new(createBitableTableResp)

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

// MockBitableCreateBitableTable mock BitableCreateBitableTable method
func (r *Mock) MockBitableCreateBitableTable(f func(ctx context.Context, request *CreateBitableTableReq, options ...MethodOptionFunc) (*CreateBitableTableResp, *Response, error)) {
	r.mockBitableCreateBitableTable = f
}

// UnMockBitableCreateBitableTable un-mock BitableCreateBitableTable method
func (r *Mock) UnMockBitableCreateBitableTable() {
	r.mockBitableCreateBitableTable = nil
}

// CreateBitableTableReq ...
type CreateBitableTableReq struct {
	AppToken string                      `path:"app_token" json:"-"` // 多维表格的唯一标识符 [app_token 参数说明](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/bitable/notification#8121eebe), 示例值: "appbcbWCzen6D8dezhoCH2RpMAh", 最小长度: `1` 字符
	Table    *CreateBitableTableReqTable `json:"table,omitempty"`    // 数据表
}

// CreateBitableTableReqTable ...
type CreateBitableTableReqTable struct {
	Name            *string                            `json:"name,omitempty"`              // 数据表名称, 请注意: 1. 名称中的首尾空格将会被去除, 示例值: "table1", 长度范围: `1` ～ `100` 字符
	DefaultViewName *string                            `json:"default_view_name,omitempty"` // 默认表格视图的名称, 不填则默认为 表格, 请注意: 1. 名称中的首尾空格将会被去除, 2. 名称中不允许包含 [ ] 两个字符, 示例值: "表格"
	Fields          []*CreateBitableTableReqTableField `json:"fields,omitempty"`            // 数据表的初始字段, 请注意: 1. 如果 default_view_name 字段和 fields 字段都不填写, 将会创建一个仅包含索引列的空数据表, 2. 如果指定了 fields 字段, 将会创建一个包含初始字段的数据表且默认第一个字段为索引列, 长度范围: `1` ～ `300`
}

// CreateBitableTableReqTableField ...
type CreateBitableTableReqTableField struct {
	FieldName   string                                      `json:"field_name,omitempty"`  // 字段名, 示例值: "文本"
	Type        int64                                       `json:"type,omitempty"`        // 字段类型, 示例值: 1, 可选值有: 1: 多行文本, 2: 数字, 3: 单选, 4: 多选, 5: 日期, 7: 复选框, 11: 人员, 13: 电话号码, 15: 超链接, 17: 附件, 18: 单向关联, 20: 公式, 21: 双向关联, 22: 地理位置, 23: 群组, 1001: 创建时间, 1002: 最后更新时间, 1003: 创建人, 1004: 修改人, 1005: 自动编号
	UiType      *string                                     `json:"ui_type,omitempty"`     // 字段在界面上的展示类型, 例如进度字段是数字的一种展示形态, 示例值: "Progress", 可选值有: Text: 多行文本, Barcode: 条码, Number: 数字, Progress: 进度, Currency: 货币, Rating: 评分, SingleSelect: 单选, MultiSelect: 多选, DateTime: 日期, Checkbox: 复选框, User: 人员, GroupChat: 群组, Phone: 电话号码, Url: 超链接, Attachment: 附件, SingleLink: 单向关联, Formula: 公式, DuplexLink: 双向关联, Location: 地理位置, CreatedTime: 创建时间, ModifiedTime: 最后更新时间, CreatedUser: 创建人, ModifiedUser: 修改人, AutoNumber: 自动编号
	Property    *CreateBitableTableReqTableFieldProperty    `json:"property,omitempty"`    // 字段属性
	Description *CreateBitableTableReqTableFieldDescription `json:"description,omitempty"` // 字段的描述
}

// CreateBitableTableReqTableFieldDescription ...
type CreateBitableTableReqTableFieldDescription struct {
	DisableSync *bool   `json:"disable_sync,omitempty"` // 是否禁止同步, 如果为true, 表示禁止同步该描述内容到表单的问题描述, 示例值: true, 默认值: `true`
	Text        *string `json:"text,omitempty"`         // 字段描述内容, 支持换行\n, 示例值: "请按 name_id 格式填写\n例如: “Alice_20202020”"
}

// CreateBitableTableReqTableFieldProperty ...
type CreateBitableTableReqTableFieldProperty struct {
	Options           []*CreateBitableTableReqTableFieldPropertyOption         `json:"options,omitempty"`            // 单选、多选字段的选项信息
	Formatter         *string                                                  `json:"formatter,omitempty"`          // 数字、公式字段的显示格式, 示例值: "0"
	DateFormatter     *string                                                  `json:"date_formatter,omitempty"`     // 日期、创建时间、最后更新时间字段的显示格式, 示例值: "日期格式"
	AutoFill          *bool                                                    `json:"auto_fill,omitempty"`          // 日期字段中新纪录自动填写创建时间, 示例值: false
	Multiple          *bool                                                    `json:"multiple,omitempty"`           // 人员字段中允许添加多个成员, 单向关联、双向关联中允许添加多个记录, 示例值: false
	TableID           *string                                                  `json:"table_id,omitempty"`           // 单向关联、双向关联字段中关联的数据表的id, 示例值: "tblsRc9GRRXKqhvW"
	TableName         *string                                                  `json:"table_name,omitempty"`         // 单向关联、双向关联字段中关联的数据表的名字, 示例值: ""table2""
	BackFieldName     *string                                                  `json:"back_field_name,omitempty"`    // 双向关联字段中关联的数据表中对应的双向关联字段的名字, 示例值: ""table1-双向关联""
	AutoSerial        *CreateBitableTableReqTableFieldPropertyAutoSerial       `json:"auto_serial,omitempty"`        // 自动编号类型
	Location          *CreateBitableTableReqTableFieldPropertyLocation         `json:"location,omitempty"`           // 地理位置输入方式
	FormulaExpression *string                                                  `json:"formula_expression,omitempty"` // 公式字段的表达式, 示例值: "bitable::$table[tblNj92WQBAasdEf].$field[fldMV60rYs]*2"
	AllowedEditModes  *CreateBitableTableReqTableFieldPropertyAllowedEditModes `json:"allowed_edit_modes,omitempty"` // 字段支持的编辑模式
	Min               *float64                                                 `json:"min,omitempty"`                // 进度、评分等字段的数据范围最小值, 示例值: 0
	Max               *float64                                                 `json:"max,omitempty"`                // 进度、评分等字段的数据范围最大值, 示例值: 10
	RangeCustomize    *bool                                                    `json:"range_customize,omitempty"`    // 进度等字段是否支持自定义范围, 示例值: true
	CurrencyCode      *string                                                  `json:"currency_code,omitempty"`      // 货币币种, 示例值: "CNY"
	Rating            *CreateBitableTableReqTableFieldPropertyRating           `json:"rating,omitempty"`             // 评分字段的相关设置
}

// CreateBitableTableReqTableFieldPropertyAllowedEditModes ...
type CreateBitableTableReqTableFieldPropertyAllowedEditModes struct {
	Manual *bool `json:"manual,omitempty"` // 是否允许手动录入, 示例值: true
	Scan   *bool `json:"scan,omitempty"`   // 是否允许移动端录入, 示例值: true
}

// CreateBitableTableReqTableFieldPropertyAutoSerial ...
type CreateBitableTableReqTableFieldPropertyAutoSerial struct {
	Type    string                                                     `json:"type,omitempty"`    // 自动编号类型, 示例值: "auto_increment_number", 可选值有: custom: 自定义编号, auto_increment_number: 自增数字
	Options []*CreateBitableTableReqTableFieldPropertyAutoSerialOption `json:"options,omitempty"` // 自动编号规则列表
}

// CreateBitableTableReqTableFieldPropertyAutoSerialOption ...
type CreateBitableTableReqTableFieldPropertyAutoSerialOption struct {
	Type  string `json:"type,omitempty"`  // 自动编号的可选规则项类型, 示例值: "created_time", 可选值有: system_number: 自增数字位, value范围1-9, fixed_text: 固定字符, 最大长度: 20, created_time: 创建时间, 支持格式 "yyyyMMdd"、"yyyyMM"、"yyyy"、"MMdd"、"MM"、"dd"
	Value string `json:"value,omitempty"` // 与自动编号的可选规则项类型相对应的取值, 示例值: "yyyyMMdd"
}

// CreateBitableTableReqTableFieldPropertyLocation ...
type CreateBitableTableReqTableFieldPropertyLocation struct {
	InputType string `json:"input_type,omitempty"` // 地理位置输入限制, 示例值: "not_limit", 可选值有: only_mobile: 只允许移动端上传, not_limit: 无限制
}

// CreateBitableTableReqTableFieldPropertyOption ...
type CreateBitableTableReqTableFieldPropertyOption struct {
	Name  *string `json:"name,omitempty"`  // 选项名, 示例值: "红色"
	ID    *string `json:"id,omitempty"`    // 选项 ID, 创建时不允许指定 ID, 示例值: "optKl35lnG"
	Color *int64  `json:"color,omitempty"` // 选项颜色, 示例值: 0, 取值范围: `0` ～ `54`
}

// CreateBitableTableReqTableFieldPropertyRating ...
type CreateBitableTableReqTableFieldPropertyRating struct {
	Symbol *string `json:"symbol,omitempty"` // 评分字段的符号展示, 示例值: "star"
}

// CreateBitableTableResp ...
type CreateBitableTableResp struct {
	TableID       string   `json:"table_id,omitempty"`        // 多维表格数据表的唯一标识符
	DefaultViewID string   `json:"default_view_id,omitempty"` // 默认表格视图的id, 该字段仅在请求参数中填写了default_view_name或fields才会返回
	FieldIDList   []string `json:"field_id_list,omitempty"`   // 数据表初始字段的id列表, 该字段仅在请求参数中填写了fields才会返回
}

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