package feishu

import (
	"context"
	"fmt"

	larkcore "github.com/larksuite/oapi-sdk-go/v3/core"
	larkdocx "github.com/larksuite/oapi-sdk-go/v3/service/docx/v1"
)

// SDK usage documentation: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/preparations
// After copying this Demo, you need to replace "YOUR_APP_ID", "YOUR_APP_SECRET" with your own application's APP_ID, APP_SECRET.
// The following example code is filled with document example values by default. If there are code issues, please fill in the relevant necessary parameters in the API debugging console before copying the code for use
func CreateTbale() {
	// Create Client
	// client := lark.NewClient("YOUR_APP_ID", "YOUR_APP_SECRET")
	client := newLarkClient()
	// Create request object
	req := larkdocx.NewCreateDocumentBlockDescendantReqBuilder().
		DocumentId(`Row7d5SPwo6ifmx8tIPcyKDUnoL`).
		BlockId(`doxcnckiJ7VjGPwpK4pwyoZEs3d`).
		DocumentRevisionId(-1).
		Body(larkdocx.NewCreateDocumentBlockDescendantReqBodyBuilder().
			ChildrenId([]string{`headingid_1`, `table_id_1`}).
			Index(0).
			Descendants([]*larkdocx.Block{
				larkdocx.NewBlockBuilder().
					BlockId(`headingid_1`).
					Children([]string{}).
					BlockType(3).
					Heading1(larkdocx.NewTextBuilder().
						Elements([]*larkdocx.TextElement{
							larkdocx.NewTextElementBuilder().
								TextRun(larkdocx.NewTextRunBuilder().
									Content(`3 rows 4 columns table example`).
									Build()).
								Build(),
						}).
						Build()).
					Build(),
				larkdocx.NewBlockBuilder().
					BlockId(`table_id_1`).
					Children([]string{"cell_1_1", "cell_1_2", "cell_1_3", "cell_1_4", "cell_2_1", "cell_2_2", "cell_2_3", "cell_2_4", "cell_3_1", "cell_3_2", "cell_3_3", "cell_3_4"}).
					BlockType(31).
					Table(larkdocx.NewTableBuilder().
						Property(larkdocx.NewTablePropertyBuilder().
							RowSize(3).
							ColumnSize(4).
							Build()).
						Build()).
					Build(),
				// First row
				larkdocx.NewBlockBuilder().BlockId("cell_1_1").Children([]string{"cell_1_1_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_1_2").Children([]string{"cell_1_2_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_1_3").Children([]string{"cell_1_3_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_1_4").Children([]string{"cell_1_4_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_1_1_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("A1").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_1_2_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("B1").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_1_3_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("C1").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_1_4_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("D1").Build()).Build()}).Build()).Build(),
				// Second row
				larkdocx.NewBlockBuilder().BlockId("cell_2_1").Children([]string{"cell_2_1_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_2_2").Children([]string{"cell_2_2_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_2_3").Children([]string{"cell_2_3_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_2_4").Children([]string{"cell_2_4_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_2_1_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("A2").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_2_2_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("B2").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_2_3_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("C2").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_2_4_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("D2").Build()).Build()}).Build()).Build(),
				// Third row
				larkdocx.NewBlockBuilder().BlockId("cell_3_1").Children([]string{"cell_3_1_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_3_2").Children([]string{"cell_3_2_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_3_3").Children([]string{"cell_3_3_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_3_4").Children([]string{"cell_3_4_text"}).BlockType(32).TableCell(larkdocx.NewTableCellBuilder().Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_3_1_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("A3").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_3_2_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("B3").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_3_3_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("C3").Build()).Build()}).Build()).Build(),
				larkdocx.NewBlockBuilder().BlockId("cell_3_4_text").Children([]string{}).BlockType(2).Text(larkdocx.NewTextBuilder().Elements([]*larkdocx.TextElement{larkdocx.NewTextElementBuilder().TextRun(larkdocx.NewTextRunBuilder().Content("D3").Build()).Build()}).Build()).Build(),
			}).
			Build()).
		Build()

	// Send request
	resp, err := client.Docx.V1.DocumentBlockDescendant.Create(context.Background(), req, larkcore.WithUserAccessToken("u-cWbzr65Wp3voeKnxW7mu2C1li3C4l4wroa00l1qy0cd6"))

	// Handle error
	if err != nil {
		fmt.Println(err)
		return
	}

	// Server error handling
	if !resp.Success() {
		fmt.Printf("logId: %s, error response: \n%s", resp.RequestId(), larkcore.Prettify(resp.CodeError))
		return
	}

	// Business processing
	fmt.Println(larkcore.Prettify(resp))
}
