package infra

import (
	"net/url"
	"strings"
)

// Oauth2AuthURL construye la URL de autorizacion OAuth2 a partir de la config.
// Funcion pura — no hace I/O, solo concatenacion de strings.
// La URL resultante redirige al usuario al proveedor para que autorice el acceso.
func Oauth2AuthURL(config OAuthConfig, state string) string {
	q := url.Values{}
	q.Set("client_id", config.ClientID)
	q.Set("redirect_uri", config.RedirectURL)
	q.Set("response_type", "code")
	if len(config.Scopes) > 0 {
		q.Set("scope", strings.Join(config.Scopes, " "))
	}
	if state != "" {
		q.Set("state", state)
	}
	sep := "?"
	if strings.Contains(config.AuthURL, "?") {
		sep = "&"
	}
	return config.AuthURL + sep + q.Encode()
}
