package cmd

import (
	"reflect"
	"testing"
)

func TestSplitKeyValue(t *testing.T) {
	tests := []struct {
		name     string
		input    string
		expected []string
	}{
		{
			name:     "valid key=value",
			input:    "environment=production",
			expected: []string{"environment", "production"},
		},
		{
			name:     "key with empty value",
			input:    "key=",
			expected: []string{"key", ""},
		},
		{
			name:     "value with equals sign",
			input:    "url=https://example.com?foo=bar",
			expected: []string{"url", "https://example.com?foo=bar"},
		},
		{
			name:     "no equals sign",
			input:    "invalid",
			expected: []string{"invalid"},
		},
		{
			name:     "multiple equals signs",
			input:    "a=b=c=d",
			expected: []string{"a", "b=c=d"},
		},
		{
			name:     "empty string",
			input:    "",
			expected: []string{""},
		},
		{
			name:     "just equals sign",
			input:    "=",
			expected: []string{"", ""},
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			result := splitKeyValue(tt.input)
			if !reflect.DeepEqual(result, tt.expected) {
				t.Errorf("splitKeyValue(%q) = %v, want %v", tt.input, result, tt.expected)
			}
		})
	}
}

func TestFormatStatus(t *testing.T) {
	tests := []struct {
		name     string
		status   string
		expected string
	}{
		{
			name:     "success status",
			status:   "success",
			expected: "✓ success",
		},
		{
			name:     "failure status",
			status:   "failure",
			expected: "✗ failure",
		},
		{
			name:     "cancelled status",
			status:   "cancelled",
			expected: "- cancelled",
		},
		{
			name:     "skipped status",
			status:   "skipped",
			expected: "○ skipped",
		},
		{
			name:     "in_progress status",
			status:   "in_progress",
			expected: "● in progress",
		},
		{
			name:     "running status",
			status:   "running",
			expected: "● in progress",
		},
		{
			name:     "queued status",
			status:   "queued",
			expected: "○ queued",
		},
		{
			name:     "waiting status",
			status:   "waiting",
			expected: "○ queued",
		},
		{
			name:     "unknown status",
			status:   "unknown",
			expected: "unknown",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			result := formatStatus(tt.status)
			if result != tt.expected {
				t.Errorf("formatStatus(%q) = %q, want %q", tt.status, result, tt.expected)
			}
		})
	}
}
