package promptcompiler

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/AgentTeam/desktop/internal/types"
)

func representativeThreadDelivery(t *testing.T) *DeliveryEnvelope {
	t.Helper()
	compiler := New(DefaultPolicy())
	env, err := compiler.CompileDeliveryEnvelope(context.Background(), EventRoutedMessageDelivery, "evt-delivery-compare", CompileInput{
		AgentID: "agt-1",
		Runtime: "codex",
		Delivery: DeliveryCompileInput{
			MessageID:        "1fe0932a87b5a31e107333d11c337448",
			TargetKey:        "chn_vj2v7bjseh5wtt",
			TargetSeq:        92,
			Target:           "#agentteam-in-agentteam:3a64da81",
			ChannelType:      "thread",
			AuthorIdentity:   types.AuthorIdentity{ActorType: "human", DisplayName: "姚维"},
			Content:          "可以，请你改完之后给我前后对比。",
			Timestamp:        "2026-07-30T10:38:05+08:00",
			MessageType:      "text",
			DeliveryMode:     "turn_direct",
			RuntimeSessionID: "019fb0a3-2c94-7d32-8e76-47c84a1be120",
			ThreadID:         "019fb0a3-2c94-7d32-8e76-47c84a1be120",
			ActiveTurnID:     "turn-1",
			WakeToken:        "31b38c52a9cc2c49a4aa9739486da639",
			Metadata: map[string]any{
				"replyThreadRoot": map[string]any{
					"messageId": "3a64da8128836a91b12a346116b71355",
					"authorProfile": map[string]any{
						"actorType":   "human",
						"displayName": "姚维",
					},
					"content":   "agentteam token 优化方案 1",
					"timestamp": "2026-07-29T01:55:28Z",
				},
			},
		},
	})
	require.NoError(t, err)
	return env.Delivery
}

func TestRenderDeliveryText_RepresentativeThreadBudget(t *testing.T) {
	text := renderDeliveryTextForRuntime(representativeThreadDelivery(t), "codex")
	require.LessOrEqual(t, EstimateTokens(text), 200, text)
	require.Contains(t, text, `target=#agentteam-in-agentteam:3a64da81`)
	require.NotContains(t, text, `wake-token`)
	require.Contains(t, text, `mcp__agentteam__message_history_read(target="#agentteam-in-agentteam:3a64da81", limit=20)`)
	require.Contains(t, text, `mcp__agentteam__message_send(target="#agentteam-in-agentteam:3a64da81", content="...")`)
	require.Contains(t, text, "thread root:")
	require.Contains(t, text, "thread history: 91 earlier replies omitted")
	require.NotContains(t, text, "targetKey=chn_vj2v7bjseh5wtt")
	require.NotContains(t, text, "session=019fb0a3-2c94-7d32-8e76-47c84a1be120")
}
