package netx

//
// Dialer from Config.
//

import (
	"github.com/ooni/probe-cli/v3/internal/bytecounter"
	"github.com/ooni/probe-cli/v3/internal/model"
	"github.com/ooni/probe-cli/v3/internal/netxlite"
)

// NewDialer creates a new Dialer from the specified config.
func NewDialer(config Config) model.Dialer {
	if config.FullResolver == nil {
		// TODO(https://github.com/ooni/probe/issues/2121#issuecomment-1147424810)
		config.FullResolver = NewResolver(config)
	}
	logger := model.ValidLoggerOrDefault(config.Logger)
	d := netxlite.NewDialerWithResolver(
		logger, config.FullResolver, config.Saver.NewConnectObserver(),
		config.ReadWriteSaver.NewReadWriteObserver(),
	)
	d = netxlite.MaybeWrapWithProxyDialer(d, config.ProxyURL)
	d = bytecounter.MaybeWrapWithContextAwareDialer(config.ContextByteCounting, d)
	return d
}