package agent

import (
	"bytes"
	"log/slog"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/desktop/internal/agent/drivercontract"
	"github.com/tidbcloud/AgentTeam/desktop/internal/consts"
)

func TestProcessLogsTerminalCodexOverflowWorkOutcomeWithoutBody(t *testing.T) {
	var logs bytes.Buffer
	previousLogger := slog.Default()
	slog.SetDefault(slog.New(slog.NewTextHandler(&logs, nil)))
	t.Cleanup(func() {
		slog.SetDefault(previousLogger)
	})

	ap := newTestProcessForRecovery(
		"agent-overflow",
		"thread-root",
		&idleCompactionProcessStubDriver{},
	)
	ap.pendingWake = &pendingDelivery{Token: "wake-root", Wake: WakeInfo{
		MessageID:   "message-root",
		Target:      "#agentteam:thread",
		MessageType: "channel_message",
	}, Status: pendingDeliveryAwaitingCheck}
	ap.pendingWakeToken = "wake-root"

	ap.handleParsedEvent(drivercontract.ParsedEvent{
		Kind:    consts.ParsedEventKindError,
		Message: "request exceeded the context window",
		Metadata: map[string]any{
			"context_window_exceeded": true,
			"will_retry":              false,
			codexThreadIDMetadataKey:  "thread-root",
			codexTurnIDMetadataKey:    "turn-overflow",
		},
	})

	output := logs.String()
	require.Contains(t, output, "codex terminal context overflow work outcome")
	require.Contains(t, output, "agent_id=agent-overflow")
	require.Contains(t, output, "thread_id=thread-root")
	require.Contains(t, output, "turn_id=turn-overflow")
	require.Contains(t, output, "message_id=message-root")
	require.Contains(t, output, "wake_token=wake-root")
	require.Contains(t, output, "work_outcome=terminal_failure")
	require.Contains(t, output, "requires_new_human_input=true")
	require.NotContains(t, output, "request exceeded the context window")
}
