package compatibility

import (
	"testing"

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

func TestRecycleBinWireContainsOnlyReviewedSemanticFacts(t *testing.T) {
	request := (&runtimev1.ListRecycleBinRequest{}).ProtoReflect().Descriptor()
	assertFieldNames(t, request.Fields(), []protoreflect.Name{"scope", "min_catalog_revision"})
	item := (&runtimev1.RecycleBinItem{}).ProtoReflect().Descriptor()
	assertFieldNames(t, item.Fields(), []protoreflect.Name{"record_id", "record_name", "object_id", "deleted_by", "deleted_date", "created_date", "last_modified_date"})
	failure := (&runtimev1.RecycleBinObjectFailure{}).ProtoReflect().Descriptor()
	assertFieldNames(t, failure.Fields(), []protoreflect.Name{"object_id", "code", "message"})
	response := (&runtimev1.ListRecycleBinResponse{}).ProtoReflect().Descriptor()
	assertFieldNames(t, response.Fields(), []protoreflect.Name{"items", "failed_objects", "receipts"})

	for _, forbidden := range []protoreflect.Name{
		"org_id", "user_id", "principal_id", "permission_map", "security_context",
		"app_installation_id", "bearer", "token", "tombstone_id", "total_size", "partial_failure",
	} {
		if request.Fields().ByName(forbidden) != nil || item.Fields().ByName(forbidden) != nil ||
			failure.Fields().ByName(forbidden) != nil || response.Fields().ByName(forbidden) != nil {
			t.Fatalf("authority, storage, or product fact %q entered recycle-bin protobuf", forbidden)
		}
	}
	if got := runtimev1.RecycleBinReadService_ListRecycleBin_FullMethodName; got != "/nexuscrm.runtime.v1.RecycleBinReadService/ListRecycleBin" {
		t.Fatalf("method = %q", got)
	}
}
