package mcp

import (
	"testing"

	"github.com/google/uuid"
)

// TestNewServerRegistersTools verifies every tool registers with a valid
// input schema. The MCP SDK panics at AddTool if a tool omits its object
// input schema, so merely constructing the server exercises that contract —
// this test would have caught the "missing input schema" panic.
func TestNewServerRegistersTools(t *testing.T) {
	defer func() {
		if r := recover(); r != nil {
			t.Fatalf("newServer panicked (tool schema bug?): %v", r)
		}
	}()
	// pool is only used inside tool handlers (invoked per-call), not at
	// registration time, so a nil pool is safe for this construction test.
	s := newServer(nil, uuid.Nil)
	if s == nil {
		t.Fatal("newServer returned nil")
	}
}

func TestObjSchema(t *testing.T) {
	s := objSchema(prop{"foo", "string", "a foo"}, prop{"n", "integer", "a number"})
	if s.Type != "object" {
		t.Errorf("schema type = %q, want object", s.Type)
	}
	if len(s.Properties) != 2 {
		t.Fatalf("got %d properties, want 2", len(s.Properties))
	}
	if s.Properties["foo"].Type != "string" || s.Properties["n"].Type != "integer" {
		t.Errorf("property types wrong: %+v", s.Properties)
	}
	// empty schema still valid (object with no properties)
	if objSchema().Type != "object" {
		t.Error("empty objSchema not an object")
	}
}
