package mcp

import (
	"reflect"
	"testing"
)

func TestParseTool(t *testing.T) {
	tests := []struct {
		name     string
		toolName string
		want     []string
	}{
		{
			name:     "simple two-part tool",
			toolName: "service.endpoint",
			want:     []string{"service", "endpoint"},
		},
		{
			name:     "three-part tool (service.Handler.Method)",
			toolName: "greeter.Greeter.Hello",
			want:     []string{"greeter", "Greeter", "Hello"},
		},
		{
			name:     "single part (invalid)",
			toolName: "service",
			want:     []string{"service"},
		},
		{
			name:     "four-part tool",
			toolName: "users.Users.Get.All",
			want:     []string{"users", "Users", "Get", "All"},
		},
		{
			name:     "empty string",
			toolName: "",
			want:     []string{""},
		},
	}

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

func TestExportFormats(t *testing.T) {
	// Test that export formats are recognized
	formats := []string{"langchain", "openapi", "json"}

	for _, format := range formats {
		t.Run(format, func(t *testing.T) {
			// This is a basic test to ensure the format strings are defined
			// The actual export functions are tested through integration tests
			if format == "" {
				t.Error("export format should not be empty")
			}
		})
	}
}

func TestDocsFormats(t *testing.T) {
	// Test that docs formats are recognized
	formats := []string{"markdown", "json"}

	for _, format := range formats {
		t.Run(format, func(t *testing.T) {
			// This is a basic test to ensure the format strings are defined
			// The actual docs functions are tested through integration tests
			if format == "" {
				t.Error("docs format should not be empty")
			}
		})
	}
}
