package organization

import "testing"

func TestInferProviderCapabilities(t *testing.T) {
	tests := []struct {
		name       string
		driverKind string
		baseURL    string
		endpoints  OrganizationProviderEndpoints
		models     []OrganizationProviderModel
		requested  OrganizationProviderCapabilities
		want       OrganizationProviderCapabilities
	}{
		{
			name:      "preserves explicit capabilities",
			requested: OrganizationProviderCapabilities{AnthropicCompatible: true},
			want:      OrganizationProviderCapabilities{AnthropicCompatible: true},
		},
		{
			name:       "codex defaults to responses",
			driverKind: "codex",
			want:       OrganizationProviderCapabilities{ResponsesCompatible: true},
		},
		{
			name:       "claude defaults to anthropic",
			driverKind: "claude",
			want:       OrganizationProviderCapabilities{AnthropicCompatible: true},
		},
		{
			name:       "opencode defaults to anthropic",
			driverKind: "opencode",
			want:       OrganizationProviderCapabilities{AnthropicCompatible: true},
		},
		{
			name: "infers endpoint-specific capabilities",
			endpoints: OrganizationProviderEndpoints{
				MessagesBaseURL:   "https://api.anthropic.com",
				ResponsesBaseURL:  "https://api.openai.com/v1",
				EmbeddingsBaseURL: "https://api.openai.com/v1",
			},
			want: OrganizationProviderCapabilities{
				AnthropicCompatible: true,
				ResponsesCompatible: true,
				EmbeddingCompatible: true,
			},
		},
		{
			name:    "infers anthropic from base url",
			baseURL: "https://api.anthropic.com",
			want:    OrganizationProviderCapabilities{AnthropicCompatible: true},
		},
		{
			name:   "infers anthropic from model id",
			models: []OrganizationProviderModel{{ID: "claude-sonnet-4.6", Name: "Claude Sonnet"}},
			want:   OrganizationProviderCapabilities{AnthropicCompatible: true},
		},
		{
			name:   "infers embeddings from model id",
			models: []OrganizationProviderModel{{ID: "text-embedding-3-large", Name: "Embedding"}},
			want:   OrganizationProviderCapabilities{OpenAICompatible: true, EmbeddingCompatible: true},
		},
		{
			name: "falls back to openai compatible",
			want: OrganizationProviderCapabilities{OpenAICompatible: true},
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := inferProviderCapabilities(tt.driverKind, tt.baseURL, tt.endpoints, tt.models, tt.requested)
			if got != tt.want {
				t.Fatalf("inferProviderCapabilities() = %+v, want %+v", got, tt.want)
			}
		})
	}
}
