package icmd

import (
	"io"
	"os"
	"time"
)

// CmdOp is an operation which modified a Cmd structure used to execute commands
type CmdOp func(*Cmd)

// WithTimeout sets the timeout duration of the command
func WithTimeout(timeout time.Duration) CmdOp {
	return func(c *Cmd) {
		c.Timeout = timeout
	}
}

// WithEnv sets the environment variable of the command.
// Each arguments are in the form of KEY=VALUE
func WithEnv(env ...string) CmdOp {
	return func(c *Cmd) {
		c.Env = env
	}
}

// Dir sets the working directory of the command
func Dir(path string) CmdOp {
	return func(c *Cmd) {
		c.Dir = path
	}
}

// WithStdin sets the standard input of the command to the specified reader
func WithStdin(r io.Reader) CmdOp {
	return func(c *Cmd) {
		c.Stdin = r
	}
}

// WithExtraFile adds a file descriptor to the command
func WithExtraFile(f *os.File) CmdOp {
	return func(c *Cmd) {
		c.ExtraFiles = append(c.ExtraFiles, f)
	}
}
