package notes

import (
	"context"
	"errors"
	"example.com/sonny-notes/gen/pkg/mcpx"
	"example.com/sonny-notes/gen/types"
	"testing"
)

func TestLookup(t *testing.T) {
	s, err := New()
	if err != nil {
		t.Fatal(err)
	}
	cases := []struct{ name, collection, id, code string }{
		{"known", "approved", "release-checklist", ""},
		{"unknown", "approved", "missing-note", "not_found"},
		{"malformed", "approved", "../private", "invalid_argument"},
		{"denied", "private", "release-checklist", "permission_denied"},
	}
	for _, c := range cases {
		t.Run(c.name, func(t *testing.T) {
			result, err := s.Note_lookup(context.Background(), &types.NoteLookupParams{Collection: c.collection, ID: c.id})
			if c.code == "" {
				if err != nil || result == nil || result.ID != "release-checklist" || result.Title != "Release review" || result.Text != "Review the change, run the checks, and record the outcome before publishing." {
					t.Fatalf("unexpected result: %v, %v", result, err)
				}
				return
			}
			var refusal *mcpx.ToolError
			if result != nil || !errors.As(err, &refusal) || refusal.Code != c.code {
				t.Fatalf("expected %s refusal, got %v, %v", c.code, result, err)
			}
		})
	}
}
