package auth

import (
	"encoding/base64"
	"encoding/json"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/tidbcloud/metrics-integration/global/internal/domain/cmd/bootstrap/wrapper"
	"github.com/tidbcloud/metrics-integration/global/internal/infrastructure/account/accountdb"
	"github.com/tidbcloud/metrics-integration/global/pkg/log"
	"go.uber.org/zap"

	"github.com/tidbcloud/metrics-integration/global/internal/domain/consts"
)

func MetricsIntegrationUserPasser(c *gin.Context) {
	value, exists := c.Get(MetricsIntegrationDefineUser)
	if !exists {
		return
	}
	user, ok := value.(*accountdb.User)
	if !ok {
		return
	}
	marshal, err := json.Marshal(user)
	if err != nil {
		log.GetGinLogger(c).Warn("failed to marshal user", zap.Error(err))
		wrapper.NewAPIError(c, http.StatusInternalServerError, InternalError)
		return
	}
	message := base64.StdEncoding.EncodeToString(marshal)
	c.Request.Header.Set(consts.GrpcGatewayMetricsIntegrationUserKey, message)
}
