package server

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/knowledgeqa/protocol"
	"github.com/tidbcloud/AgentTeam/internal/store/im"
)

type recordingKnowledgeQATurnEventWriter struct {
	workspaceID string
	memberID    string
	event       im.StreamEvent
}

func (writer *recordingKnowledgeQATurnEventWriter) AppendMemberWorkspaceEvent(_ context.Context, workspaceID, memberID string, event im.StreamEvent) (im.StreamEvent, error) {
	writer.workspaceID = workspaceID
	writer.memberID = memberID
	writer.event = event
	return event, nil
}

func TestKnowledgeQATurnStreamNotifierPublishesOwnerScopedDurableEvent(t *testing.T) {
	writer := &recordingKnowledgeQATurnEventWriter{}
	notifier := newKnowledgeQATurnStreamNotifier(writer, nil)

	notifier.NotifyKnowledgeQATurnUpdated(context.Background(), protocol.TurnUpdate{
		WorkspaceID: "wsp_1", OwnerMemberID: "mem_1",
		ThreadChannelID: "thr_1", TurnID: "kqt_1",
		MessageProjectionChanged: true,
	})

	require.Equal(t, "wsp_1", writer.workspaceID)
	require.Equal(t, "mem_1", writer.memberID)
	require.Equal(t, protocol.TurnUpdatedEventType, writer.event.Type)
	require.Equal(t, "thr_1", writer.event.ScopeID)
	require.Equal(t, "kqt_1", writer.event.EntityID)
	require.Equal(t, map[string]any{
		"threadChannelId":          "thr_1",
		"turnId":                   "kqt_1",
		"messageProjectionChanged": true,
	}, writer.event.Payload)
}
