package autonatv2

import 

// autoNATSettings is used to configure AutoNAT
type autoNATSettings struct {
	allowPrivateAddrs                    bool
	serverRPM                            int
	serverPerPeerRPM                     int
	serverDialDataRPM                    int
	maxConcurrentRequestsPerPeer         int
	dataRequestPolicy                    dataRequestPolicyFunc
	now                                  func() time.Time
	amplificatonAttackPreventionDialWait time.Duration
	metricsTracer                        MetricsTracer
	throttlePeerDuration                 time.Duration
}

func defaultSettings() *autoNATSettings {
	return &autoNATSettings{
		allowPrivateAddrs:                    false,
		serverRPM:                            60, // 1 every second
		serverPerPeerRPM:                     12, // 1 every 5 seconds
		serverDialDataRPM:                    12, // 1 every 5 seconds
		maxConcurrentRequestsPerPeer:         2,
		dataRequestPolicy:                    amplificationAttackPrevention,
		amplificatonAttackPreventionDialWait: 3 * time.Second,
		now:                                  time.Now,
		throttlePeerDuration:                 defaultThrottlePeerDuration,
	}
}

type AutoNATOption func(s *autoNATSettings) error

func (, ,  int,  int) AutoNATOption {
	return func( *autoNATSettings) error {
		.serverRPM = 
		.serverPerPeerRPM = 
		.serverDialDataRPM = 
		.maxConcurrentRequestsPerPeer = 
		return nil
	}
}

func ( MetricsTracer) AutoNATOption {
	return func( *autoNATSettings) error {
		.metricsTracer = 
		return nil
	}
}

func withDataRequestPolicy( dataRequestPolicyFunc) AutoNATOption {
	return func( *autoNATSettings) error {
		.dataRequestPolicy = 
		return nil
	}
}

func allowPrivateAddrs( *autoNATSettings) error {
	.allowPrivateAddrs = true
	return nil
}

func withAmplificationAttackPreventionDialWait( time.Duration) AutoNATOption {
	return func( *autoNATSettings) error {
		.amplificatonAttackPreventionDialWait = 
		return nil
	}
}

func withThrottlePeerDuration( time.Duration) AutoNATOption {
	return func( *autoNATSettings) error {
		.throttlePeerDuration = 
		return nil
	}
}