package tools

import (
	"context"
	"testing"

	"git.warky.dev/wdevs/amcs/internal/mcperrors"
)

func TestLearningsAddRequiresSummary(t *testing.T) {
	tool := &LearningsTool{}

	_, _, err := tool.Add(context.Background(), nil, AddLearningInput{})
	if err == nil {
		t.Fatal("Add() error = nil, want error")
	}

	_, data := requireRPCError(t, err)
	if data.Field != "summary" {
		t.Fatalf("Add() error field = %q, want %q", data.Field, "summary")
	}
}

func TestLearningsMethodsRequireConfiguredStore(t *testing.T) {
	tool := &LearningsTool{}

	t.Run("add", func(t *testing.T) {
		_, _, err := tool.Add(context.Background(), nil, AddLearningInput{Summary: "Keep this"})
		if err == nil {
			t.Fatal("Add() error = nil, want error")
		}
		_, data := requireRPCError(t, err)
		if data.Type != mcperrors.TypeInvalidInput {
			t.Fatalf("Add() data.type = %q, want %q", data.Type, mcperrors.TypeInvalidInput)
		}
	})

	t.Run("get", func(t *testing.T) {
		_, _, err := tool.Get(context.Background(), nil, GetLearningInput{ID: 0})
		if err == nil {
			t.Fatal("Get() error = nil, want error")
		}
		_, data := requireRPCError(t, err)
		if data.Type != mcperrors.TypeInvalidInput {
			t.Fatalf("Get() data.type = %q, want %q", data.Type, mcperrors.TypeInvalidInput)
		}
	})

	t.Run("list", func(t *testing.T) {
		_, _, err := tool.List(context.Background(), nil, ListLearningsInput{})
		if err == nil {
			t.Fatal("List() error = nil, want error")
		}
		_, data := requireRPCError(t, err)
		if data.Type != mcperrors.TypeInvalidInput {
			t.Fatalf("List() data.type = %q, want %q", data.Type, mcperrors.TypeInvalidInput)
		}
	})
}

func TestNormalizeStringSliceTrimsDedupesAndDropsEmpties(t *testing.T) {
	got := normalizeStringSlice([]string{" alpha ", "beta", "", "beta", "alpha"})
	if len(got) != 2 {
		t.Fatalf("normalizeStringSlice() len = %d, want 2", len(got))
	}
	if got[0] != "alpha" || got[1] != "beta" {
		t.Fatalf("normalizeStringSlice() = %#v, want [alpha beta]", got)
	}
}
