package ipmi_sensor

import (
	"fmt"
	"os/exec"
	"strings"
	"time"

	"github.com/influxdata/telegraf/internal"
)

type CommandRunner struct{}

func (t CommandRunner) cmd(conn *Connection, args ...string) *exec.Cmd {
	path := conn.Path
	opts := append(conn.options(), args...)

	if path == "" {
		path = "ipmitool"
	}

	return exec.Command(path, opts...)
}

func (t CommandRunner) Run(conn *Connection, args ...string) (string, error) {
	cmd := t.cmd(conn, args...)

	output, err := internal.CombinedOutputTimeout(cmd, time.Second*5)
	if err != nil {
		return "", fmt.Errorf("run %s %s: %s (%s)",
			cmd.Path, strings.Join(cmd.Args, " "), string(output), err)
	}

	return string(output), err
}