package cmd

import (
	"testing"
)

func TestIsInteractive(t *testing.T) {
	tests := []struct {
		name            string
		stdinIsTerminal bool
		envValue        string // empty string means env is cleared/unset
		want            bool
	}{
		{
			name:            "terminal with empty env returns true",
			stdinIsTerminal: true,
			envValue:        "",
			want:            true,
		},
		{
			name:            "terminal with env=1 returns false",
			stdinIsTerminal: true,
			envValue:        "1",
			want:            false,
		},
		{
			name:            "terminal with env=true returns false",
			stdinIsTerminal: true,
			envValue:        "true",
			want:            false,
		},
		{
			name:            "non-terminal with empty env returns false",
			stdinIsTerminal: false,
			envValue:        "",
			want:            false,
		},
		{
			name:            "non-terminal with env=1 returns false",
			stdinIsTerminal: false,
			envValue:        "1",
			want:            false,
		},
		{
			name:            "terminal with env=0 returns false",
			stdinIsTerminal: true,
			envValue:        "0",
			want:            false,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			// Save and restore the original function.
			original := isStdinTerminal
			t.Cleanup(func() {
				isStdinTerminal = original
			})

			// Inject fake terminal check.
			isStdinTerminal = func() bool {
				return tt.stdinIsTerminal
			}

			// Set env var. t.Setenv("", "") clears/unsets it.
			t.Setenv("KELD_NONINTERACTIVE", tt.envValue)

			got := isInteractive()
			if got != tt.want {
				t.Errorf("isInteractive() = %v, want %v", got, tt.want)
			}
		})
	}
}
