package auth

import (
	"net/http"

	"github.com/rs/zerolog"
)

type contextKey int

const (
	contextAuthClaims contextKey = iota
)

func RequestAuthClaims[T any, PT interface {
	*T
	Claims
	zerolog.LogObjectMarshaler
}](r *http.Request) *T {
	value := r.Context().Value(contextAuthClaims)
	if value == nil {
		return nil
	}
	if claims, ok := value.(*T); ok {
		return claims
	}

	return nil
}

func RequestAuthClaimsAsLogObjectMarshaler(r *http.Request) zerolog.LogObjectMarshaler {
	value := r.Context().Value(contextAuthClaims)
	if value == nil {
		return nil
	}
	if claims, ok := value.(zerolog.LogObjectMarshaler); ok {
		return claims
	}

	return nil
}