package middleware

import (
	"fmt"
	"strings"

	"gitea.frenchtouch.duckdns.org/kratisto/budget-backend/internal/storage/model"
	"gitea.frenchtouch.duckdns.org/kratisto/budget-backend/internal/utils"

	"github.com/gin-gonic/gin"
	"google.golang.org/api/oauth2/v1"
)

func ValidateOAuthToken(c *gin.Context) {
	authorizationHeader := c.GetHeader("Authorization")
	authorizationHeaderSplitted := strings.Split(authorizationHeader, " ")
	if len(authorizationHeaderSplitted) != 2 {
		utils.JSONError(c.Writer, model.ErrBadRequestFormat)
		return
	}

	oauth2Service, err := oauth2.NewService(c)
	if oauth2Service == nil {
		fmt.Println(err)
		utils.JSONError(c.Writer, model.ErrInternalServer)
		return
	}
	tokenInfoCall := oauth2Service.Tokeninfo()
	tokenInfoCall.IdToken(authorizationHeaderSplitted[1])
	token, err := tokenInfoCall.Do()
	if err != nil {
		utils.GetLogger().WithError(err).Error(err)
		utils.JSONError(c.Writer, model.ErrBadRequestFormat)
		return
	}
	c.Set("googleUserId", token.UserId)
}
