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

// GetWhiteboardNodeList 获取画板内所有的节点
//
// doc: https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/board-v1/whiteboard-node/list
func (r *DriveService) GetWhiteboardNodeList(ctx context.Context, request *GetWhiteboardNodeListReq, options ...MethodOptionFunc) (*GetWhiteboardNodeListResp, *Response, error) {
	if r.cli.mock.mockDriveGetWhiteboardNodeList != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Drive#GetWhiteboardNodeList mock enable")
		return r.cli.mock.mockDriveGetWhiteboardNodeList(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "Drive",
		API:                   "GetWhiteboardNodeList",
		Method:                "GET",
		URL:                   r.cli.openBaseURL + "/open-apis/board/v1/whiteboards/:whiteboard_id/nodes",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
		NeedUserAccessToken:   true,
	}
	resp := new(getWhiteboardNodeListResp)

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

// MockDriveGetWhiteboardNodeList mock DriveGetWhiteboardNodeList method
func (r *Mock) MockDriveGetWhiteboardNodeList(f func(ctx context.Context, request *GetWhiteboardNodeListReq, options ...MethodOptionFunc) (*GetWhiteboardNodeListResp, *Response, error)) {
	r.mockDriveGetWhiteboardNodeList = f
}

// UnMockDriveGetWhiteboardNodeList un-mock DriveGetWhiteboardNodeList method
func (r *Mock) UnMockDriveGetWhiteboardNodeList() {
	r.mockDriveGetWhiteboardNodeList = nil
}

// GetWhiteboardNodeListReq ...
type GetWhiteboardNodeListReq struct {
	WhiteboardID string `path:"whiteboard_id" json:"-"` // 画板唯一标识, 示例值: "Ru8nwrWFOhEmaFbEU2VbPRsHcxb", 长度范围: `22` ～ `27` 字符
}

// GetWhiteboardNodeListResp ...
type GetWhiteboardNodeListResp struct {
	Nodes []*GetWhiteboardNodeListRespNode `json:"nodes,omitempty"` // 查询结果
}

// GetWhiteboardNodeListRespNode ...
type GetWhiteboardNodeListRespNode struct {
	ID             string                                       `json:"id,omitempty"`              // 节点 id
	Type           string                                       `json:"type,omitempty"`            // 节点图形类型, 目前创建节点仅支持创建图片、文本、基础图形等类型, 读取到不支持创建的图形时只返回一些基础信息, 如 id、type、text、style 等, 可选值有: image: 图片, text_shape: 文本, group: 组合, composite_shape: 基础图形, svg: svg 图形, connector: 连线, table: 表格, life_line: 对象生命线, activation: 控制焦点, section: 分区, table_uml: 类图, table_er: 实体关系图, sticky_note: 便签, mind_map: 思维导图, paint: 画笔
	ParentID       string                                       `json:"parent_id,omitempty"`       // 父节点 id
	Children       []string                                     `json:"children,omitempty"`        // 子节点
	X              float64                                      `json:"x,omitempty"`               // 图形相对画布的 x 轴位置信息（存在父容器时为相对父容器的坐标, 父容器为组合图形 group 时, 坐标是穿透的）, 单位为 px
	Y              float64                                      `json:"y,omitempty"`               // 图形相对画布的 y 轴位置信息（存在父容器时为相对父容器的坐标, 父容器为组合图形 group 时, 坐标是穿透的）, 单位为 px
	Angle          float64                                      `json:"angle,omitempty"`           // 图形旋转角度
	Width          float64                                      `json:"width,omitempty"`           // 图形宽度, 单位为 px
	Height         float64                                      `json:"height,omitempty"`          // 图形高度, 单位为 px
	Text           *GetWhiteboardNodeListRespNodeText           `json:"text,omitempty"`            // 图形内文字
	Style          *GetWhiteboardNodeListRespNodeStyle          `json:"style,omitempty"`           // 图形样式
	Image          *GetWhiteboardNodeListRespNodeImage          `json:"image,omitempty"`           // 图片
	CompositeShape *GetWhiteboardNodeListRespNodeCompositeShape `json:"composite_shape,omitempty"` // 基础图形属性
	Connector      *GetWhiteboardNodeListRespNodeConnector      `json:"connector,omitempty"`       // 连线属性
	Section        *GetWhiteboardNodeListRespNodeSection        `json:"section,omitempty"`         // 分区属性
	Table          *GetWhiteboardNodeListRespNodeTable          `json:"table,omitempty"`           // 表格属性
	MindMap        *GetWhiteboardNodeListRespNodeMindMap        `json:"mind_map,omitempty"`        // 思维导图属性
}

// GetWhiteboardNodeListRespNodeCompositeShape ...
type GetWhiteboardNodeListRespNodeCompositeShape struct {
	Type string `json:"type,omitempty"` // 基础图形的具体类型, 可选值有: round_rect2: 全圆角矩形, ellipse: 圆形, hexagon: 六边形, cylinder: 圆柱体, parallelogram: 平行四边形, trapezoid: 梯形, triangle: 三角形, round_rect: 圆角矩形, step: 步骤, diamond: 菱形, rect: 基础矩形, star: 五角星, bubble: 气泡, pentagon: 五边形, forward_arrow: 单向箭头, document_shape: 文档图形, condition_shape: 组合片段, cloud: 云朵, cross: 十字形, step2: 步骤图形2, predefined_process: 预定义流程, delay_shape: 延迟图形, off_page_connector: 跨页引用, note_shape: 注释图形, data_process: 数据处理, data_store: 数据存储, data_store2: 数据存储2, data_store3: 数据存储3, star2: 爆炸星型, star3: 四角形, star4: 六角形, actor: 角色小人, brace: 花括号, condition_shape2: 组合片段2, double_arrow: 双向箭头, data_flow_round_rect3: 数据处理（正方圆角矩形）, rect_bubble: 矩形气泡, manual_input: 手动输入图形, flow_chart_round_rect: 流程图圆角矩形, flow_chart_round_rect2: 流程图全圆角矩形, flow_chart_diamond: 流程图判定, flow_chart_parallelogram: 流程图数据, flow_chart_cylinder: 流程图数据库, flow_chart_trapezoid: 流程图手动操作, flow_chart_hexagon: 流程图准备, data_flow_round_rect: 数据流外部实体, data_flow_ellipse: 数据流数据处理, backward_arrow: 反向箭头（左箭头）, brace_reverse: 反向花括号（左括号）, flow_chart_mq: 消息队列, horiz_cylinder: 水平方向圆柱体, class_interface: 类图, 接口, classifier: 类图, 类目, circular_ring: 圆环, pie: 扇形, right_triangle: 直角三角形, octagon: 八边形, state_start: 状态图, 开始, state_end: 状态图, 结束, state_concurrence: 状态图, 并发, component_shape: 组件, component_shape2: 组件2, component_interface: 组件, 接口, component_required_interface: 组件, 需求接口, component_assembly: 组件, 组装, cube: 立方体
}

// GetWhiteboardNodeListRespNodeConnector ...
type GetWhiteboardNodeListRespNodeConnector struct {
	StartObject *GetWhiteboardNodeListRespNodeConnectorStartObject `json:"start_object,omitempty"` // 连线连接的起点图形
	EndObject   *GetWhiteboardNodeListRespNodeConnectorEndObject   `json:"end_object,omitempty"`   // 连线连接的终点图形
	Captions    *GetWhiteboardNodeListRespNodeConnectorCaptions    `json:"captions,omitempty"`     // 连线文本
}

// GetWhiteboardNodeListRespNodeConnectorCaptions ...
type GetWhiteboardNodeListRespNodeConnectorCaptions struct {
	Data []*GetWhiteboardNodeListRespNodeConnectorCaptionsData `json:"data,omitempty"` // 文本
}

// GetWhiteboardNodeListRespNodeConnectorCaptionsData ...
type GetWhiteboardNodeListRespNodeConnectorCaptionsData struct {
	Text            string `json:"text,omitempty"`             // 文字内容
	FontWeight      string `json:"font_weight,omitempty"`      // 文字字重, 可选值有: regular: 常规, bold: 加粗
	FontSize        int64  `json:"font_size,omitempty"`        // 文字大小
	HorizontalAlign string `json:"horizontal_align,omitempty"` // 水平对齐, 可选值有: left: 向左对齐, center: 居中对齐, right: 向右对齐
	VerticalAlign   string `json:"vertical_align,omitempty"`   // 垂直对齐, 可选值有: top: 顶部对齐, mid: 垂直居中, bottom: 底部对齐
}

// GetWhiteboardNodeListRespNodeConnectorEndObject ...
type GetWhiteboardNodeListRespNodeConnectorEndObject struct {
	ID string `json:"id,omitempty"` // 连接图形的 id
}

// GetWhiteboardNodeListRespNodeConnectorStartObject ...
type GetWhiteboardNodeListRespNodeConnectorStartObject struct {
	ID string `json:"id,omitempty"` // 连接图形的 id
}

// GetWhiteboardNodeListRespNodeImage ...
type GetWhiteboardNodeListRespNodeImage struct {
	Token string `json:"token,omitempty"` // 图片 token
}

// GetWhiteboardNodeListRespNodeMindMap ...
type GetWhiteboardNodeListRespNodeMindMap struct {
	ParentID string `json:"parent_id,omitempty"` // 思维导图父节点 id, 为空表示是思维导图的根节点
}

// GetWhiteboardNodeListRespNodeSection ...
type GetWhiteboardNodeListRespNodeSection struct {
	Title string `json:"title,omitempty"` // 分区标题
}

// GetWhiteboardNodeListRespNodeStyle ...
type GetWhiteboardNodeListRespNodeStyle struct {
	FillOpacity   float64 `json:"fill_opacity,omitempty"`   // 填充透明度
	BorderStyle   string  `json:"border_style,omitempty"`   // 边框样式, 可选值有: solid: 实线, none: 无边框, dash: 虚线, dot: 点状虚线
	BorderWidth   string  `json:"border_width,omitempty"`   // 边框宽度, 可选值有: extra_narrow: 极细, narrow: 细, medium: 中, wide: 粗
	BorderOpacity float64 `json:"border_opacity,omitempty"` // 边框透明度
	HFlip         bool    `json:"h_flip,omitempty"`         // 水平翻折
	VFlip         bool    `json:"v_flip,omitempty"`         // 垂直翻折
}

// GetWhiteboardNodeListRespNodeTable ...
type GetWhiteboardNodeListRespNodeTable struct {
	Meta  *GetWhiteboardNodeListRespNodeTableMeta   `json:"meta,omitempty"`  // 元信息
	Title string                                    `json:"title,omitempty"` // 标题
	Cells []*GetWhiteboardNodeListRespNodeTableCell `json:"cells,omitempty"` // 单元格列表
}

// GetWhiteboardNodeListRespNodeTableCell ...
type GetWhiteboardNodeListRespNodeTableCell struct {
	RowIndex  int64                                            `json:"row_index,omitempty"`  // 行下标, 从 1 开始
	ColIndex  int64                                            `json:"col_index,omitempty"`  // 列下标, 从 1 开始
	MergeInfo *GetWhiteboardNodeListRespNodeTableCellMergeInfo `json:"merge_info,omitempty"` // 单元格合并信息
	Children  []string                                         `json:"children,omitempty"`   // 单元格包含的子节点 id
	Text      *GetWhiteboardNodeListRespNodeTableCellText      `json:"text,omitempty"`       // 单元格内文字
}

// GetWhiteboardNodeListRespNodeTableCellMergeInfo ...
type GetWhiteboardNodeListRespNodeTableCellMergeInfo struct {
	RowSpan int64 `json:"row_span,omitempty"` // 从当前行索引起被合并的连续行数
	ColSpan int64 `json:"col_span,omitempty"` // 从当前列索引起被合并的连续列数
}

// GetWhiteboardNodeListRespNodeTableCellText ...
type GetWhiteboardNodeListRespNodeTableCellText struct {
	Text            string `json:"text,omitempty"`             // 文字内容
	FontWeight      string `json:"font_weight,omitempty"`      // 文字字重, 可选值有: regular: 常规, bold: 加粗
	FontSize        int64  `json:"font_size,omitempty"`        // 文字大小
	HorizontalAlign string `json:"horizontal_align,omitempty"` // 水平对齐, 可选值有: left: 向左对齐, center: 居中对齐, right: 向右对齐
	VerticalAlign   string `json:"vertical_align,omitempty"`   // 垂直对齐, 可选值有: top: 顶部对齐, mid: 垂直居中, bottom: 底部对齐
}

// GetWhiteboardNodeListRespNodeTableMeta ...
type GetWhiteboardNodeListRespNodeTableMeta struct {
	RowNum int64 `json:"row_num,omitempty"` // 行数
	ColNum int64 `json:"col_num,omitempty"` // 列数
}

// GetWhiteboardNodeListRespNodeText ...
type GetWhiteboardNodeListRespNodeText struct {
	Text            string `json:"text,omitempty"`             // 文字内容
	FontWeight      string `json:"font_weight,omitempty"`      // 文字字重, 可选值有: regular: 常规, bold: 加粗
	FontSize        int64  `json:"font_size,omitempty"`        // 文字大小
	HorizontalAlign string `json:"horizontal_align,omitempty"` // 水平对齐, 可选值有: left: 向左对齐, center: 居中对齐, right: 向右对齐
	VerticalAlign   string `json:"vertical_align,omitempty"`   // 垂直对齐, 可选值有: top: 顶部对齐, mid: 垂直居中, bottom: 底部对齐
}

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