package auth

import "strings"

type PublicLoginProviderContext struct {
	LookupEnv func(string) string
}

func (c PublicLoginProviderContext) Env(key string) string {
	if c.LookupEnv == nil {
		return ""
	}
	return c.LookupEnv(key)
}

type PublicLoginProviderDescriptor struct {
	Kind               string
	Label              string
	Placement          string
	ClientID           string
	DefaultEnvironment string
}

type PublicLoginProviderRegistration struct {
	ProviderID string
	Aliases    []string
	Build      func(PublicLoginProviderContext) PublicLoginProviderDescriptor
}

func NormalizePublicLoginProviderToken(raw string) string {
	normalized := strings.ToLower(strings.TrimSpace(raw))
	return strings.ReplaceAll(normalized, "-", "_")
}

func NormalizeBuiltinPublicLoginProviderID(raw string) string {
	switch NormalizePublicLoginProviderToken(raw) {
	case "backend", "backend_password", "password":
		return "backend"
	case "google", "google_oauth", "google_sso":
		return "google"
	case "token", "access_token", "session_token":
		return "token"
	default:
		return ""
	}
}
