package proc

import (
	"bytes"
	"strings"
	"testing"
)

func TestPrefixWriterEachLineGetsPrefix(t *testing.T) {
	var buf bytes.Buffer
	w := newPrefixWriter(&buf, "svc")
	_, _ = w.Write([]byte("hello\nworld\n"))
	got := buf.String()
	want := "[svc] hello\n[svc] world\n"
	if got != want {
		t.Errorf("got %q, want %q", got, want)
	}
}

func TestPrefixWriterEmptyInput(t *testing.T) {
	var buf bytes.Buffer
	w := newPrefixWriter(&buf, "svc")
	_, _ = w.Write(nil)
	if buf.Len() != 0 {
		t.Errorf("got %q, want empty", buf.String())
	}
}

func TestPrefixWriterMultipleLinesOneWrite(t *testing.T) {
	var buf bytes.Buffer
	w := newPrefixWriter(&buf, "agentteam")
	_, _ = w.Write([]byte("a\nb\nc\n"))
	got := buf.String()
	want := "[agentteam] a\n[agentteam] b\n[agentteam] c\n"
	if got != want {
		t.Errorf("got %q, want %q", got, want)
	}
	if strings.Count(got, "[agentteam]") != 3 {
		t.Errorf("expected 3 prefixes, got %d", strings.Count(got, "[agentteam]"))
	}
}

func TestPrefixWriterBuffersPartialLineAcrossWrites(t *testing.T) {
	var buf bytes.Buffer
	w := newPrefixWriter(&buf, "svc")
	_, _ = w.Write([]byte("hel"))
	if buf.Len() != 0 {
		t.Fatalf("partial line was emitted early: %q", buf.String())
	}
	_, _ = w.Write([]byte("lo\n"))
	if got, want := buf.String(), "[svc] hello\n"; got != want {
		t.Fatalf("got %q, want %q", got, want)
	}
}
