package util

import (
	"encoding/base64"
	"errors"
	"github.com/gin-gonic/gin"
	"k8s.io/apimachinery/pkg/util/json"
	"strings"
)

type Header struct {
	Exp  int64 `json:"exp"`
	User User  `json:"user"`
}

type User struct {
	Email     string `json:"email"`
	UserName  string `json:"username"`
	CsrfToken string `json:"csrfToken"`
}

// ParseCookie parse the cookie and return the user's email
func ParseCookie(ctx *gin.Context) (string, error) {
	cookies, err := ctx.Cookie("clinic.session_id")
	if err != nil {
		return "", err
	}
	items := strings.Split(cookies, ".")
	if len(items) < 2 {
		return "", errors.New("cookie error: error format.")
	}
	return GetUserEmail(items[1])
}

func GetUserEmail(token string) (string, error) {
	decode, err := base64.StdEncoding.DecodeString(token)
	if err != nil {
		return "", err
	}

	var header Header
	if err = json.Unmarshal(decode, &header); err != nil {
		return "", err
	}
	return header.User.Email, nil
}
