package main

import (
	"context"
	"fmt"

	"github.com/gin-gonic/gin"
	"github.com/prometheus/client_golang/prometheus/promhttp"
	"github.com/tidbcloud/grpc-metadb/api"
	"github.com/tidbcloud/grpc-metadb/ddb"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"github.com/tidbcloud/tiinf/monitor/titracing"
	"github.com/tidbcloud/tiinf/transport/http/tigin"
	"go.uber.org/zap"
)

const (
	componentName = "region-deploy-test"
)

func main() {
	ctx := context.Background()
	setup(ctx)
	/* metrics */
	mEng := gin.Default()
	mEng.Any("/metrics", prometheusHandler())
	go mEng.Run("0.0.0.0:9090")

	ginEng := tigin.Default()
	api.Routers(ginEng)
	addr := ":8080"
	tilog.Info(ctx, "serving HTTP Service", zap.String("address", addr))
	go ddb.DynamoDBV2Test(ctx)
	panic(fmt.Sprintf("HTTP Service died %+v", ginEng.Run(addr)))
}

func setup(ctx context.Context) {
	// jaeger
	if _, err := titracing.InitJaeger(componentName); err != nil {
		tilog.Error(ctx, "init tiinf jaeger provider failed", zap.Error(err))
		panic(fmt.Sprintf("failed to init tracing, err=%v", err))
	}
}

func prometheusHandler() gin.HandlerFunc {
	h := promhttp.Handler()

	return func(c *gin.Context) {
		h.ServeHTTP(c.Writer, c.Request)
	}
}
