package sidecarchan

import (
	"fmt"

	"github.com/flothus/tmux-xterm-research/server-go/internal/harness/runtime/tmux"
)

// FromEnv returns a tmux.SidecarChannel based on the HARNESS_SIDECAR_CHANNEL
// environment variable:
//
//	""        / "pane"    → nil (default: pane scraping; current behavior)
//	"socket"               → SocketChannel under baseDir (or HARNESS_SIDECAR_BASEDIR)
//	"mailbox"              → MailboxChannel under baseDir (or HARNESS_SIDECAR_BASEDIR)
//
// Unknown values are rejected with an error so a typo doesn't silently
// fall back to the default channel.
//
// getenv is passed in (rather than calling os.Getenv directly) so tests
// can drive it without polluting process state.
func FromEnv(getenv func(string) string, baseDir string) (tmux.SidecarChannel, error) {
	mode := getenv("HARNESS_SIDECAR_CHANNEL")
	if override := getenv("HARNESS_SIDECAR_BASEDIR"); override != "" {
		baseDir = override
	}
	switch mode {
	case "", "pane":
		return nil, nil
	case "socket":
		return NewSocketChannel(baseDir), nil
	case "mailbox":
		return NewMailboxChannel(baseDir), nil
	default:
		return nil, fmt.Errorf("sidecarchan: unknown HARNESS_SIDECAR_CHANNEL %q (want pane|socket|mailbox)", mode)
	}
}
