package api

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

	"github.com/Flashfyre/pokerogue-server/db"
)

func GetUsernameFromRequest(request *http.Request) (string, error) {
	if request.Header.Get("Authorization") == "" {
		return "", fmt.Errorf("missing token")
	}

	token, err := base64.StdEncoding.DecodeString(request.Header.Get("Authorization"))
	if err != nil {
		return "", fmt.Errorf("failed to decode token: %s", err)
	}

	if len(token) != 32 {
		return "", fmt.Errorf("invalid token length: got %d, expected 32", len(token))
	}

	username, err := db.GetUsernameFromToken(token)
	if err != nil {
		return "", fmt.Errorf("failed to validate token: %s", err)
	}

	return username, nil
}

func GetUuidFromRequest(request *http.Request) ([]byte, error) {
	if request.Header.Get("Authorization") == "" {
		return nil, fmt.Errorf("missing token")
	}

	token, err := base64.StdEncoding.DecodeString(request.Header.Get("Authorization"))
	if err != nil {
		return nil, fmt.Errorf("failed to decode token: %s", err)
	}

	if len(token) != 32 {
		return nil, fmt.Errorf("invalid token length: got %d, expected 32", len(token))
	}

	uuid, err := db.GetUuidFromToken(token)
	if err != nil {
		return nil, fmt.Errorf("failed to validate token: %s", err)
	}

	return uuid, nil
}