package osexec

import (
	"context"
	"time"
)

// FakeRunner is a test-friendly Runner that returns pre-determined values, supports delays, and can simulate timeouts.
type FakeRunner struct {
	Stdout   string
	Stderr   string
	ExitCode int
	Delay    time.Duration
	Err      error
}

func (f *FakeRunner) Run(ctx context.Context, name string, args ...string) (string, string, int, error) {
	if f.Delay > 0 {
		select {
		case <-time.After(f.Delay):
		case <-ctx.Done():
			// Pass through context error
			return "", "", -1, ctx.Err()
		}
	}
	return f.Stdout, f.Stderr, f.ExitCode, f.Err
}
