package lark

import (
	"github.com/gin-gonic/gin"
	"github.com/marmotedu/errors"
	srvv1 "github.com/pingcap-inc/pinsights/internal/apiserver/service/v1"
	"github.com/pingcap-inc/pinsights/internal/apiserver/store"
	"github.com/pingcap-inc/pinsights/internal/pkg/code"
	"github.com/pingcap-inc/pinsights/model"
	"github.com/pingcap-inc/pinsights/pkg/log"
	"github.com/pingcap-inc/pinsights/pkg/util/core"
)

type LarkBiTableController struct {
	srv srvv1.Service
}

func NewLarkBiTableController(store store.Factory) *LarkBiTableController {
	return &LarkBiTableController{
		srv: srvv1.NewService(store),
	}
}

func (bt *LarkBiTableController) GetBiTables(c *gin.Context) {
	log.L(c).Info("get bitables function called.")

	params := core.ParseQuery(c, "larkAppToken")
	if params["larkAppToken"] == "" {
		core.WriteResponse(c, errors.WithCode(code.ErrValidation, ""), nil)
		return
	}

	mparams := &model.GetLarkBiTablesParams{
		LarkAppToken: params["larkAppToken"],
	}

	bitables, err := bt.srv.LarkBiTable().GetBiTables(c, mparams)
	if err != nil {
		core.WriteResponse(c, err, nil)

		return
	}

	core.WriteResponse(c, nil, bitables)
}

func (bt *LarkBiTableController) MGetBiTableRecords(c *gin.Context) {
	log.L(c).Info("mget bitable records function called.")

	params := core.ParseQuery(c, "larkAppToken", "tableIds")
	if params["larkAppToken"] == "" || params["tableIds"] == "" {
		core.WriteResponse(c, errors.WithCode(code.ErrValidation, ""), nil)
		return
	}

	mparams := &model.MGetLarkBiTableRecordsParams{
		LarkAppToken: params["larkAppToken"],
		TableIds:     params["tableIds"],
	}

	rss, err := bt.srv.LarkBiTable().MGetBiTableRecords(c, mparams)
	if err != nil {
		core.WriteResponse(c, err, nil)

		return
	}

	core.WriteRawResponse(c, nil, rss)
}
