package task

import (
	"testing"

	"github.com/tidbcloud/AgentTeam/internal/unread"
)

func TestOverlayTaskUnreadUsesRuntimeState(t *testing.T) {
	runtime := &fakeTaskUnreadRuntime{states: map[string]unread.ScopeUnreadState{
		"task_scope_1": {
			ScopeID:             "task_scope_1",
			MessageUnreadCount:  1,
			ActivityUnreadCount: 2,
			ManualUnread:        true,
			ServingState:        unread.ServingStateReady,
		},
	}}
	task := Task{
		ID:          "task_1",
		TaskScopeID: "task_scope_1",
		ReadState:   &TaskReadState{UnreadCount: 99},
	}

	overlayTaskUnread(runtime, "wsp_1", "mem_1", &task)

	if task.ReadState.UnreadCount != 3 {
		t.Fatalf("UnreadCount = %d, want unified runtime message/activity count 3", task.ReadState.UnreadCount)
	}
	if !task.ReadState.ManualUnread {
		t.Fatal("ManualUnread = false, want runtime manual-unread state")
	}
}

func TestOverlayRelatedTaskUnreadUsesRuntimeState(t *testing.T) {
	runtime := &fakeTaskUnreadRuntime{states: map[string]unread.ScopeUnreadState{
		"task_scope_1": {
			ScopeID:             "task_scope_1",
			ActivityUnreadCount: 2,
			ServingState:        unread.ServingStateReady,
		},
		"task_scope_2": {
			ScopeID:      "task_scope_2",
			ManualUnread: true,
			ServingState: unread.ServingStateReady,
		},
	}}
	rows := []RelatedTaskRow{
		{TaskID: "task_1", TaskScopeID: "task_scope_1", Unread: RelatedTaskUnread{Count: 99}},
		{TaskID: "task_2", TaskScopeID: "task_scope_2"},
	}

	overlayRelatedTaskUnread(runtime, "wsp_1", "mem_1", rows)

	if rows[0].Unread.Count != 2 || rows[0].Unread.ManualUnread {
		t.Fatalf("first row unread = %+v, want targeted task activity unread", rows[0].Unread)
	}
	if rows[1].Unread.Count != 0 || !rows[1].Unread.ManualUnread {
		t.Fatalf("second row unread = %+v, want runtime manual unread", rows[1].Unread)
	}
}
