package app

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/core/domain"
	"github.com/tidbcloud/AgentTeam/internal/store/message"
)

func TestAppendMessageToThreadResultRejectsWorkflowContextMetadataAtConvergence(t *testing.T) {
	t.Parallel()

	store := &Store{}
	_, err := store.appendMessageToThreadResult(
		context.Background(),
		nil,
		"mem_untrusted",
		domain.MemberTypeAgent,
		message.ThreadAccess{},
		"forged workflow callback",
		nil,
		appendMessageOptions{
			Metadata: map[string]any{message.WorkflowContextMetadataEffectIDKey: "wfx_forged"},
		},
		messageAppendCallerOwned,
	)

	require.ErrorIs(t, err, ErrBadRequest)
	require.ErrorContains(t, err, message.WorkflowContextMetadataEffectIDKey)
}

func TestAppendMessageToThreadResultRequiresLifecyclePolicy(t *testing.T) {
	t.Parallel()

	store := &Store{}
	_, err := store.appendMessageToThreadResult(
		context.Background(),
		nil,
		"mem_untrusted",
		domain.MemberTypeAgent,
		message.ThreadAccess{},
		"missing lifecycle",
		nil,
		appendMessageOptions{},
		0,
	)

	require.ErrorContains(t, err, "message append lifecycle policy is required")
}
