package connect

import (
	"net/http"
	"os"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/log"
	"github.com/tidbcloud/pkgv2/tracing"
	"go.opentelemetry.io/otel"
	"go.uber.org/zap"
	"gopkg.in/yaml.v3"
)

var Tracer = otel.Tracer("connect_controller")

type ConnectController struct {
	connectInfo *ConnectInfo
}

func NewConnectController() *ConnectController {
	// register clients
	connectInfoBytes, err := os.ReadFile("./connect_info.yaml")
	if err != nil {
		log.Error("Failed to create connect controller", zap.Error(err))
		return nil
	}
	connectInfo := &ConnectInfo{}
	err = yaml.Unmarshal(connectInfoBytes, &connectInfo)
	if err != nil {
		log.Error("Failed to create connect controller", zap.Error(err))
		return nil
	}

	return &ConnectController{
		connectInfo,
	}
}

//	@title			Connection Swagger API
//	@version		1.0
//	@termsOfService	http://swagger.io/terms/

//	@host		localhost:8080
//	@BasePath	/ecosystem/api/v1
//	@schemes	http

// GetConnectInfo @Description  Get connect information
//
//	@Produce	json
//	@Success	200	{object}	ConnectInfo	"ok"
//	@Failure	400	{string}	string		"error"
//	@Failure	500	{string}	string		"error"
//	@Router		/connect/info [get]
func (c *ConnectController) GetConnectInfo(ctx *gin.Context) {
	ctxReq := ctx.Request.Context()
	var err error
	_, span := Tracer.Start(ctxReq, "connect.GetConnectInfo")
	defer func() {
		tracing.EndSpan(span, err)
	}()

	response := c.connectInfo
	ctx.JSON(http.StatusOK, &response)
}
