package auth

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

	"github.com/gin-gonic/gin"
	appconfig "github.com/tidbcloud/dataflow-service/app/config"
	"github.com/tidbcloud/dataflow-service/internal/cmd/bootstrap/server/wrapper"
	"github.com/tidbcloud/dataflow-service/pkg/account/accountdb"
	"github.com/tidbcloud/dataflow-service/pkg/log"
	"go.uber.org/zap"
)

func DataflowUserPasser(c *gin.Context) {
	value, exists := c.Get(DataflowDefineUser)
	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(appconfig.GrpcGatewayDataflowUserKey, message)
}
