package wechat

import (
	"net/url"

	"github.com/imroc/req/v3"
)

type Options func(*Client)

func WithAppID(appID string) Options {
	return func(we *Client) {
		we.appID = appID
	}
}

// WithAppSecret sets the app secret
func WithAppSecret(appSecret string) Options {
	return func(we *Client) {
		we.appSecret = appSecret
	}
}

// WithToken sets the token
func WithToken(token string) Options {
	return func(we *Client) {
		we.token = token
	}
}

// WithAESKey sets the AES key
func WithAESKey(aesKey string) Options {
	return func(we *Client) {
		we.aesKey = aesKey
	}
}

// WithClient sets the http client
func WithClient(client *req.Client) Options {
	return func(we *Client) {
		we.client = client
	}
}

type ScopeAuthorizeURLOptions func(url.Values)

func ScopeAuthorizeURLWithScope(scope AuthScope) ScopeAuthorizeURLOptions {
	return func(v url.Values) {
		v.Set("scope", scope.String())
	}
}

func ScopeAuthorizeURLWithRedirectURI(uri string) ScopeAuthorizeURLOptions {
	return func(v url.Values) {
		v.Set("redirect_uri", uri)
	}
}

func ScopeAuthorizeURLWithState(state string) ScopeAuthorizeURLOptions {
	return func(v url.Values) {
		v.Set("state", state)
	}
}

func ScopeAuthorizeURLWithForcePopup() ScopeAuthorizeURLOptions {
	return func(v url.Values) {
		v.Set("forcePopup", "true")
	}
}

func WithVerifySiteKeyPair(key, value string) Options {
	return func(we *Client) {
		we.verifyKey = key
		we.verifyValue = value
	}
}
