package boundary_test

import (
	"os"
	"path/filepath"
	"strings"
	"testing"
)

// Current process closure tests separately forbid importing the old service
// graph. This guard prevents restoring an independently runnable monolith.
func TestMonolithServingSurfacesAreRetired(t *testing.T) {
	root := filepath.Join("..", "..", "..")
	for _, path := range []string{
		"backend/cmd/server/main.go",
		"backend/distributions/cmd/crm-server/main.go",
		"backend/pkg/serverruntime/runtime.go",
		"backend/pkg/serverruntime/routes.go",
		"backend/internal/application/services/application_navigation_contract.go",
		"infra/backend.Dockerfile",
		"infra/entrypoint.sh",
	} {
		if _, err := os.Stat(filepath.Join(root, path)); !os.IsNotExist(err) {
			t.Fatalf("retired monolith surface %s exists or cannot be checked: %v", path, err)
		}
	}
}

func TestSchemaAuthoringDoesNotOwnApplicationNavigation(t *testing.T) {
	path := filepath.Join("..", "application", "services", "metadata_authoring_contract.go")
	source, err := os.ReadFile(path)
	if err != nil {
		t.Fatal(err)
	}
	for _, forbidden := range []string{"NavigationItems", "UpdateApp(", "UpdateAppTx(", "CreateSchemaWithAppNavigation", "RemoveObjectFromAppNavigationTx"} {
		if strings.Contains(string(source), forbidden) {
			t.Fatalf("schema authoring retains competing navigation mutation %q", forbidden)
		}
	}
}

func TestMonolithLayoutAuthoringAdapterIsRetired(t *testing.T) {
	source, err := os.ReadFile(filepath.Join("..", "application", "services", "metadata_authoring_contract.go"))
	if err != nil {
		t.Fatal(err)
	}
	for _, name := range []string{"SaveLayout", "WriteLayoutHistory", "SetDefaultLayout", "DeleteLayout", "RestoreLayout", "DeleteLayoutAssignment", "SaveApprovalLayout", "SetDefaultApprovalLayout", "DeleteApprovalLayout"} {
		if strings.Contains(string(source), "func (sm *ServiceManager) "+name+"(") {
			t.Fatalf("retired in-process Layout authoring adapter %s exists", name)
		}
	}
}
