package apiserver

import (
	"github.com/gin-gonic/gin"
	"github.com/pingcap-inc/pingcat/internal/apiserver/controller/v1/lark"
	"github.com/pingcap-inc/pingcat/internal/apiserver/store/mysql"
	"github.com/pingcap-inc/pingcat/internal/pkg/middleware"

	"github.com/pingcap-inc/pingcat/internal/pkg/code"

	"github.com/pingcap-inc/pchub/pkg/errors"
	"github.com/pingcap-inc/pchub/pkg/util/ginres"

	"github.com/pingcap-inc/pingcat/internal/apiserver/controller/v1/chat"
)

func initRouter(g *gin.Engine) {
	installController(g)
}

func installController(g *gin.Engine) *gin.Engine {
	g.NoRoute(func(c *gin.Context) {
		ginres.WriteResponse(c, errors.WithCode(code.ErrNotFound, "Not found."), nil)
	})

	storeIns, _ := mysql.GetMySQLFactoryOr(nil)
	v1 := g.Group("/v1")
	{
		publicv1 := v1.Group("")
		authv1 := v1.Group("", middleware.Auth())

		larkEventController := lark.NewLarkEventController(storeIns)
		go larkEventController.InitAskPingCatUserList(nil)
		publicv1.POST("/lark/event", larkEventController.HandleEvent)
		publicv1.POST("/lark/msgcallback", larkEventController.HandleMsgCardCallback)
		publicv1.POST("/lark/event-mock", larkEventController.HandleMockEvent)
		authv1.POST("/lark/sync-ask-group-members", larkEventController.InitAskPingCatUserList)

		chatCtrl := chat.NewChatController(storeIns)
		authv1.POST("/msg", chatCtrl.ReceiveMsg)
	}

	return g
}
