// Copyright (c) 2016 Arista Networks, Inc.
// Use of this source code is governed by the Apache License 2.0
// that can be found in the COPYING file.

package lanz

import (
	"time"

	"github.com/aristanetworks/goarista/logger"
)

// Option is a LANZ client factory option.
type Option func(c *client)

// WithAddr specifies the address of the LANZ server.
// If WithConnector is not used, then WithAddr must be used.
// When WithConnector is used, WithAddr can be used to pass the address string for displaying.
func WithAddr(addr string) Option {
	return func(c *client) {
		c.addr = addr
	}
}

// WithConnector specifies a connector used to communicate with LANZ server.
func WithConnector(conn ConnectReadCloser) Option {
	return func(c *client) {
		c.conn = conn
	}
}

// WithTimeout specifies the timeout for connecting to LANZ server.
// It only takes effect for default connector.
func WithTimeout(d time.Duration) Option {
	return func(c *client) {
		c.timeout = d
	}
}

// WithBackoff specifies the backoff time after failed connection to LANZ server.
// It only takes effect for default connector.
func WithBackoff(d time.Duration) Option {
	return func(c *client) {
		c.backoff = d
	}
}

// WithLogger sets the logger to be used by this lanz client.
func WithLogger(l logger.Logger) Option {
	return func(c *client) {
		c.log = l
	}
}
