package controlplane

import (
	"os"
	"strings"
	"testing"
)

func TestAppPackFinalizationStaysOutOfOperationsGodFile(t *testing.T) {
	operationsSrc := readControlplaneSourceForStructure(t, "operations.go")
	finalizationSrc := readControlplaneSourceForStructure(t, "operations_app_pack_finalization.go")

	for _, symbol := range []string{
		"type appliedAppPack struct",
		"func finalizeAppliedAppPacks(",
		"func finalizeAppliedAppPacksWith(",
		"func finalizeAppliedAppPacksWithActiveHook(",
		"func markAppliedAppPacksFailed(",
	} {
		if strings.Contains(operationsSrc, symbol) {
			t.Fatalf("operations.go still owns app-pack finalization symbol %q", symbol)
		}
		if !strings.Contains(finalizationSrc, symbol) {
			t.Fatalf("operations_app_pack_finalization.go is missing app-pack finalization symbol %q", symbol)
		}
	}
}

func readControlplaneSourceForStructure(t *testing.T, filename string) string {
	t.Helper()
	body, err := os.ReadFile(filename)
	if err != nil {
		t.Fatalf("read %s: %v", filename, err)
	}
	return string(body)
}
