package utils

import "testing"

func TestFormatToolFeedbackMessage(t *testing.T) {
	got := FormatToolFeedbackMessage(
		"read_file",
		"I will read README.md first to confirm the current project structure.",
		"{\n  \"path\": \"README.md\"\n}",
	)
	want := "\U0001f527 `read_file`\nI will read README.md first to confirm the current project structure.\n```json\n{\n  \"path\": \"README.md\"\n}\n```"
	if got != want {
		t.Fatalf("FormatToolFeedbackMessage() = %q, want %q", got, want)
	}
}

func TestFormatToolFeedbackMessage_EmptyExplanationShowsArgs(t *testing.T) {
	got := FormatToolFeedbackMessage("read_file", "", "{\n  \"path\": \"README.md\"\n}")
	want := "\U0001f527 `read_file`\n```json\n{\n  \"path\": \"README.md\"\n}\n```"
	if got != want {
		t.Fatalf("FormatToolFeedbackMessage() = %q, want %q", got, want)
	}
}

func TestFormatToolFeedbackMessage_EmptyToolNameOmitsToolLine(t *testing.T) {
	got := FormatToolFeedbackMessage("", "Continue drafting the final response.", "")
	want := "Continue drafting the final response."
	if got != want {
		t.Fatalf("FormatToolFeedbackMessage() = %q, want %q", got, want)
	}
}

func TestFormatToolFeedbackMessage_EmptyExplanationAndArgsKeepsOnlyToolLine(t *testing.T) {
	got := FormatToolFeedbackMessage("read_file", "", "")
	want := "\U0001f527 `read_file`"
	if got != want {
		t.Fatalf("FormatToolFeedbackMessage() = %q, want %q", got, want)
	}
}

func TestFitToolFeedbackMessage_TruncatesBodyWithinSingleMessage(t *testing.T) {
	got := FitToolFeedbackMessage(
		"\U0001f527 `read_file`\nRead README.md first to confirm the current project structure.",
		40,
	)
	want := "\U0001f527 `read_file`\nRead README.md first to..."
	if got != want {
		t.Fatalf("FitToolFeedbackMessage() = %q, want %q", got, want)
	}
}

func TestFitToolFeedbackMessage_TruncatesSingleLineMessage(t *testing.T) {
	got := FitToolFeedbackMessage("\U0001f527 `read_file`", 10)
	want := "\U0001f527 `read..."
	if got != want {
		t.Fatalf("FitToolFeedbackMessage() = %q, want %q", got, want)
	}
}
