package promptcompiler

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestCompiledPromptInitialPromptSelectsModeAndCanonicalFallback(t *testing.T) {
	cases := []struct {
		name     string
		surfaces TestLaunchSurfaces
		resumed  bool
		want     string
	}{
		{name: "fresh surface", surfaces: TestLaunchSurfaces{Prompt: "canonical", FreshPrompt: "fresh", ResumePrompt: "resume"}, want: "fresh"},
		{name: "resume surface", surfaces: TestLaunchSurfaces{Prompt: "canonical", FreshPrompt: "fresh", ResumePrompt: "resume"}, resumed: true, want: "resume"},
		{name: "fresh canonical fallback", surfaces: TestLaunchSurfaces{Prompt: "canonical", ResumePrompt: "resume"}, want: "canonical"},
		{name: "resume canonical fallback", surfaces: TestLaunchSurfaces{Prompt: "canonical", FreshPrompt: "fresh"}, resumed: true, want: "canonical"},
	}
	for _, tc := range cases {
		t.Run(tc.name, func(t *testing.T) {
			carrier, err := NewTestLaunchCarrier(context.Background(), "pi", tc.surfaces)
			require.NoError(t, err)
			require.Equal(t, tc.want, carrier.InitialPrompt(tc.resumed))
		})
	}
}

func TestCompiledPromptInitialPromptRejectsUnsealedCarrier(t *testing.T) {
	var carrier CompiledPrompt
	require.Empty(t, carrier.InitialPrompt(false))
	require.Empty(t, carrier.InitialPrompt(true))
}
