package larkbot

import (
	"github.com/gin-gonic/gin"
	"github.com/marmotedu/errors"
	"github.com/pingcap-inc/pinsights/internal/larkbot/controller/v1/event"
	"github.com/pingcap-inc/pinsights/internal/larkbot/store/mysql"
	"github.com/pingcap-inc/pinsights/internal/pkg/code"
	"github.com/pingcap-inc/pinsights/pkg/util/core"
)

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

func installMiddleware(g *gin.Engine) {
}

func installController(g *gin.Engine) *gin.Engine {
	g.NoRoute(func(c *gin.Context) {
		core.WriteResponse(c, errors.WithCode(code.ErrPageNotFound, "Page not found."), nil)
	})

	storeIns, _ := mysql.GetMySQLFactoryOr(nil)
	v1 := g.Group("/v1")
	{
		larkv1 := v1.Group("/lark")
		{
			larkEventController := event.NewLarkEventController(storeIns)
			go larkEventController.InitWhiteList()
			go larkEventController.InitContactSyncCron()
			larkv1.POST("/event", larkEventController.HandleEvent)
			larkv1.POST("/whitelist/refresh", larkEventController.ManualTriggerWhiteList)
			larkv1.POST("/groups/refresh", larkEventController.ManualTriggerGroups)
		}
	}

	return g
}
