package promptcompiler

import (
	"context"
	"errors"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/desktop/internal/types"
)

func TestCompileTurnContextRendersResolvedAttachmentsBeforeRuntimeCarrier(t *testing.T) {
	carrier, err := New(DefaultPolicy()).CompilePrompt(context.Background(), CompileDescriptor{
		EventID:   "evt-attachment-success",
		EventKind: EventTurnContext,
		EventType: EventFreshStart,
	}, CompileInput{
		AgentID: "agent",
		Runtime: "codex",
		Attachments: AttachmentResolution{Prepared: []types.RuntimeAttachment{{
			ID: "att-1", Filename: "report.txt", Path: "/tmp/report.txt", URI: "file:///tmp/report.txt", MIME: "text/plain", Size: 12,
		}}},
	}, "codex")
	require.NoError(t, err)
	require.Contains(t, carrier.SlotText("turnInput"), "path: /tmp/report.txt")
	require.Contains(t, carrier.SlotText("turnInput"), "Attached files have been prepared locally")
}

func TestCompileTurnContextRendersAttachmentFailureBeforeRuntimeCarrier(t *testing.T) {
	carrier, err := New(DefaultPolicy()).CompilePrompt(context.Background(), CompileDescriptor{
		EventID:   "evt-attachment-failure",
		EventKind: EventTurnContext,
		EventType: EventFreshStart,
	}, CompileInput{
		AgentID:     "agent",
		Runtime:     "codex",
		Attachments: AttachmentResolutionError([]types.MessageAttachment{{ID: "att-1", Filename: "report.txt"}}, errors.New("offline")),
	}, "codex")
	require.NoError(t, err)
	require.Contains(t, carrier.SlotText("turnInput"), "Attachment preparation failed")
	require.Contains(t, carrier.SlotText("turnInput"), "offline")
}
