package domain

import "time"

// CommandID is a strongly-typed identifier for commands.
type CommandID string

// CommandType represents the type of command being executed.
type CommandType string

const (
	CommandTypeClaude CommandType = "claude"
	CommandTypeShell  CommandType = "shell"
	CommandTypeGit    CommandType = "git"
)

// Command represents a command to execute in a project's pod.
type Command struct {
	ID        CommandID
	ProjectID ProjectID
	Type      CommandType
	Args      []string
	StartedAt time.Time
}

// CommandResult represents the outcome of command execution.
type CommandResult struct {
	CommandID  CommandID
	ExitCode   int
	DurationMs int64
	Error      error
}

// Success returns true if the command completed successfully.
func (r *CommandResult) Success() bool {
	return r.Error == nil && r.ExitCode == 0
}

// OutputLine represents a single line of command output.
type OutputLine struct {
	Stream    string // "stdout" or "stderr"
	Line      string
	Timestamp time.Time
}

// OutputHandler is called for each line of output from a command.
type OutputHandler func(line OutputLine)
