package ethtool

import (
	"net"

	"github.com/influxdata/telegraf"
)

type Command interface {
	Init() error
	DriverName(intf string) (string, error)
	Interfaces() ([]net.Interface, error)
	Stats(intf string) (map[string]uint64, error)
}

type Ethtool struct {
	// This is the list of interface names to include
	InterfaceInclude []string `toml:"interface_include"`

	// This is the list of interface names to ignore
	InterfaceExclude []string `toml:"interface_exclude"`

	Log telegraf.Logger `toml:"-"`

	// the ethtool command
	command Command
}

const (
	pluginName       = "ethtool"
	tagInterface     = "interface"
	tagDriverName    = "driver"
	fieldInterfaceUp = "interface_up"

	sampleConfig = `
  ## List of interfaces to pull metrics for
  # interface_include = ["eth0"]

  ## List of interfaces to ignore when pulling metrics.
  # interface_exclude = ["eth1"]
`
)

func (e *Ethtool) SampleConfig() string {
	return sampleConfig
}

// Description returns a one-sentence description on the Input
func (e *Ethtool) Description() string {
	return "Returns ethtool statistics for given interfaces"
}
