package routes

/**
 * 配置路由
 */
import (
	"cron_admin/app/http/controllers"
	"cron_admin/app/http/middlewares"
	"cron_admin/app/http/trace"
	"cron_admin/app/utils/metric"
	"cron_admin/config"

	"github.com/gin-gonic/gin"
	"github.com/qit-team/snow-core/http/middleware"
	"github.com/qit-team/snow-core/log/logger"
	"github.com/swaggo/gin-swagger"
	"github.com/swaggo/gin-swagger/swaggerFiles"
)

// api路由配置
func RegisterRoute(router *gin.Engine) {
	//middleware: 服务错误处理 => 生成请求id => access log
	router.Use(middlewares.ServerRecovery(), middleware.GenRequestId, middleware.GenContextKit, middleware.AccessLog())

	if config.GetConf().PrometheusCollectEnable && config.IsEnvEqual(config.ProdEnv) {
		router.Use(middlewares.CollectMetric())
		metric.Init(metric.EnableRuntime(), metric.EnableProcess())
		metricHandler := metric.Handler()
		router.GET("/metrics", func(ctx *gin.Context) {
			metricHandler.ServeHTTP(ctx.Writer, ctx.Request)
		})
	}

	if len(config.GetConf().SkyWalkingOapServer) > 0 && config.IsEnvEqual(config.ProdEnv) {
		err := trace.InitTracer(config.GetConf().ServiceName, config.GetConf().SkyWalkingOapServer)
		if err != nil {
			logger.Error(nil, "InitTracer", err.Error())
		} else {
			router.Use(middlewares.Trace())
		}
	}

	router.Use(middlewares.Cors())
	router.NoRoute(controllers.Error404)

	//api版本
	//v1 := router.Group("/v1", middlewares.ValidateRequest())
	//{
	//
	//}

	router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

	//router.GET("/hello", controllers.HelloHandler)
	//router.GET("/create", controllers.HelloCreateHandler)
	//router.GET("/update", controllers.UpdateHandler)
	//router.GET("/delete", controllers.DeleteHandler)
	//router.GET("/query", controllers.QueryHandler)
}