package client

import (
	"net/http"

	"github.com/bufbuild/connect-go"
)

type config struct {
	httpClient *http.Client
	skipVerify bool
	opts       []connect.ClientOption
}

// An Option configures a mutex.
type Option interface {
	apply(*config)
}

// OptionFunc is a function that configure a value.
type OptionFunc func(*config)

// Apply calls f(option)
func (f OptionFunc) apply(cfg *config) {
	f(cfg)
}

func WithSkipVerify(c bool) Option {
	return OptionFunc(func(cfg *config) {
		cfg.skipVerify = c
	})
}

func WithClientOptions(opts ...connect.ClientOption) Option {
	return OptionFunc(func(cfg *config) {
		cfg.opts = append(cfg.opts, opts...)
	})
}

// WithGRPC configures clients to use the HTTP/2 gRPC protocol.
func WithGRPC(c bool) Option {
	return OptionFunc(func(cfg *config) {
		if !c {
			return
		}
		cfg.opts = append(cfg.opts, connect.WithGRPC())
	})
}

// WithGRPCWeb configures clients to use the gRPC-Web protocol.
func WithGRPCWeb(c bool) Option {
	return OptionFunc(func(cfg *config) {
		if !c {
			return
		}
		cfg.opts = append(cfg.opts, connect.WithGRPCWeb())
	})
}