package cmd

import (
	"testing"

	"github.com/steveyegge/gastown/internal/beads"
)

func TestMigrationResultStatus(t *testing.T) {
	tests := []struct {
		name     string
		result   migrationResult
		wantIcon string
	}{
		{
			name: "migrated shows checkmark",
			result: migrationResult{
				OldID:   "gt-mayor",
				NewID:   "hq-mayor",
				Status:  "migrated",
				Message: "successfully migrated",
			},
			wantIcon: "✓",
		},
		{
			name: "would migrate shows checkmark",
			result: migrationResult{
				OldID:   "gt-mayor",
				NewID:   "hq-mayor",
				Status:  "would migrate",
				Message: "would copy state from gt-mayor",
			},
			wantIcon: "✓",
		},
		{
			name: "skipped shows empty circle",
			result: migrationResult{
				OldID:   "gt-mayor",
				NewID:   "hq-mayor",
				Status:  "skipped",
				Message: "already exists",
			},
			wantIcon: "⊘",
		},
		{
			name: "error shows X",
			result: migrationResult{
				OldID:   "gt-mayor",
				NewID:   "hq-mayor",
				Status:  "error",
				Message: "failed to create",
			},
			wantIcon: "✗",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			var icon string
			switch tt.result.Status {
			case "migrated", "would migrate":
				icon = "✓"
			case "skipped":
				icon = "⊘"
			case "error":
				icon = "✗"
			}
			if icon != tt.wantIcon {
				t.Errorf("icon for status %q = %q, want %q", tt.result.Status, icon, tt.wantIcon)
			}
		})
	}
}

func TestTownBeadIDHelpers(t *testing.T) {
	tests := []struct {
		name string
		got  string
		want string
	}{
		{"MayorBeadIDTown", beads.MayorBeadIDTown(), "hq-mayor"},
		{"DeaconBeadIDTown", beads.DeaconBeadIDTown(), "hq-deacon"},
		{"DogBeadIDTown", beads.DogBeadIDTown("fido"), "hq-dog-fido"},
		{"RoleBeadIDTown mayor", beads.RoleBeadIDTown("mayor"), "hq-mayor-role"},
		{"RoleBeadIDTown witness", beads.RoleBeadIDTown("witness"), "hq-witness-role"},
	}

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