package compatibility

import (
	"testing"

	runtimev1 "github.com/pingcap-inc/nexuscrm-contract/wire-go/gen/runtime/v1"
	"google.golang.org/protobuf/reflect/protoreflect"
)

func TestCreateDefaultPreviewWireContainsOnlyReviewedSemanticFacts(t *testing.T) {
	request := (&runtimev1.PreviewCreateDefaultsRequest{}).ProtoReflect().Descriptor()
	assertFieldNames(t, request.Fields(), []protoreflect.Name{
		"object_id", "parent_field_id", "parent_record_id", "min_catalog_revision",
	})
	field := (&runtimev1.CreateDefaultField{}).ProtoReflect().Descriptor()
	assertFieldNames(t, field.Fields(), []protoreflect.Name{
		"name", "kind", "integer_value", "reference_value", "display_value", "provenance",
	})
	response := (&runtimev1.PreviewCreateDefaultsResponse{}).ProtoReflect().Descriptor()
	assertFieldNames(t, response.Fields(), []protoreflect.Name{"fields", "receipts"})

	for _, forbidden := range []protoreflect.Name{
		"org_id", "user_id", "principal_id", "permission_map", "security_context",
		"app_installation_id", "object_label", "layout", "error_message", "query",
	} {
		if request.Fields().ByName(forbidden) != nil || field.Fields().ByName(forbidden) != nil ||
			response.Fields().ByName(forbidden) != nil {
			t.Fatalf("authority, disclosure, or product fact %q entered create-default protobuf", forbidden)
		}
	}
	if runtimev1.RecordCreateDefaultPreviewService_PreviewCreateDefaults_FullMethodName !=
		"/nexuscrm.runtime.v1.RecordCreateDefaultPreviewService/PreviewCreateDefaults" {
		t.Fatalf("method = %q", runtimev1.RecordCreateDefaultPreviewService_PreviewCreateDefaults_FullMethodName)
	}
	if values := runtimev1.CreateDefaultValueKind_CREATE_DEFAULT_VALUE_KIND_UNSPECIFIED.Descriptor().Values(); values.Len() != 3 {
		t.Fatalf("value-kind vocabulary has %d values, want three", values.Len())
	}
	if values := runtimev1.CreateDefaultProvenance_CREATE_DEFAULT_PROVENANCE_UNSPECIFIED.Descriptor().Values(); values.Len() != 3 {
		t.Fatalf("provenance vocabulary has %d values, want three", values.Len())
	}
}
