package promptcompiler_test

import (
	"encoding/json"
	"reflect"
	"testing"

	"github.com/stretchr/testify/require"

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

func TestExternalJSONCannotForgeCompiledPrompt(t *testing.T) {
	var carrier promptcompiler.CompiledPrompt
	err := json.Unmarshal([]byte(`{"envelope":{"schemaVersion":"forged","fingerprint":"forged"},"rendered":{"runtime":"codex"},"launch":{"Prompt":"FORGED SEMANTIC PROMPT"}}`), &carrier)
	require.Error(t, err)
	require.False(t, carrier.Valid())
	require.False(t, carrier.HasLaunchCarrier())
	require.Empty(t, carrier.LaunchSurface("prompt"))
}

func TestExternalPromptBlockHasNoSettableSemanticTextField(t *testing.T) {
	_, hasText := reflect.TypeOf(promptcompiler.PromptBlock{}).FieldByName("Text")
	require.False(t, hasText, "external callers must not construct arbitrary PromptBlock prose")
	_, hasLegacy := reflect.TypeOf(promptcompiler.GeneratedPromptInput{}).FieldByName("Text")
	require.False(t, hasLegacy, "generated lifecycle input must remain closed typed data")
}
