// Package witness provides the polecat monitoring agent.
package witness

import (
	"time"
)

// State represents the witness's running state.
type State string

const (
	// StateStopped means the witness is not running.
	StateStopped State = "stopped"

	// StateRunning means the witness is actively monitoring.
	StateRunning State = "running"

	// StatePaused means the witness is paused (not monitoring).
	StatePaused State = "paused"
)

// Witness represents a rig's polecat monitoring agent.
type Witness struct {
	// RigName is the rig this witness monitors.
	RigName string `json:"rig_name"`

	// State is the current running state.
	State State `json:"state"`

	// PID is the process ID if running in background.
	PID int `json:"pid,omitempty"`

	// StartedAt is when the witness was started.
	StartedAt *time.Time `json:"started_at,omitempty"`

	// MonitoredPolecats tracks polecats being monitored.
	MonitoredPolecats []string `json:"monitored_polecats,omitempty"`

	// LastCheckAt is when the last health check was performed.
	LastCheckAt *time.Time `json:"last_check_at,omitempty"`

	// Stats contains cumulative statistics.
	Stats WitnessStats `json:"stats"`

	// Config contains auto-spawn configuration.
	Config WitnessConfig `json:"config"`

	// SpawnedIssues tracks which issues have been spawned (to avoid duplicates).
	SpawnedIssues []string `json:"spawned_issues,omitempty"`
}

// WitnessConfig contains configuration for the witness.
type WitnessConfig struct {
	// MaxWorkers is the maximum number of concurrent polecats (default: 4).
	MaxWorkers int `json:"max_workers"`

	// SpawnDelayMs is the delay between spawns in milliseconds (default: 5000).
	SpawnDelayMs int `json:"spawn_delay_ms"`

	// AutoSpawn enables automatic spawning for ready issues (default: true).
	AutoSpawn bool `json:"auto_spawn"`

	// EpicID limits spawning to children of this epic (optional).
	EpicID string `json:"epic_id,omitempty"`

	// IssuePrefix limits spawning to issues with this prefix (optional).
	IssuePrefix string `json:"issue_prefix,omitempty"`
}

// WitnessStats contains cumulative witness statistics.
type WitnessStats struct {
	// TotalChecks is the total number of health checks performed.
	TotalChecks int `json:"total_checks"`

	// TotalNudges is the total number of nudges sent to polecats.
	TotalNudges int `json:"total_nudges"`

	// TotalEscalations is the total number of escalations to mayor.
	TotalEscalations int `json:"total_escalations"`

	// TodayChecks is the number of checks today.
	TodayChecks int `json:"today_checks"`

	// TodayNudges is the number of nudges today.
	TodayNudges int `json:"today_nudges"`
}

