syntax = "proto3";

package nexuscrm.runtime.v1;

import "common/v1/common.proto";

option go_package = "github.com/pingcap-inc/nexuscrm-contract/wire-go/gen/runtime/v1;runtimev1";

// RecordCreateDefaultPreviewService previews only Runtime-owned create
// defaults. Product route grammar and response projection remain caller-owned.
service RecordCreateDefaultPreviewService {
  rpc PreviewCreateDefaults(PreviewCreateDefaultsRequest) returns (PreviewCreateDefaultsResponse);
}

// Identity and authority are authenticated transport context. Parent context
// is optional as a pair; Runtime resolves configured target fields itself.
message PreviewCreateDefaultsRequest {
  string object_id = 1;
  optional string parent_field_id = 2;
  optional string parent_record_id = 3;
  optional uint64 min_catalog_revision = 4;
}

enum CreateDefaultValueKind {
  CREATE_DEFAULT_VALUE_KIND_UNSPECIFIED = 0;
  CREATE_DEFAULT_VALUE_KIND_INTEGER = 1;
  CREATE_DEFAULT_VALUE_KIND_REFERENCE = 2;
}

enum CreateDefaultProvenance {
  CREATE_DEFAULT_PROVENANCE_UNSPECIFIED = 0;
  CREATE_DEFAULT_PROVENANCE_SIBLING_MAX_PLUS_ONE = 1;
  CREATE_DEFAULT_PROVENANCE_CURRENT_PRINCIPAL = 2;
}

message CreateDefaultField {
  string name = 1;
  CreateDefaultValueKind kind = 2;
  oneof value {
    sint64 integer_value = 3;
    string reference_value = 4;
  }
  optional string display_value = 5;
  CreateDefaultProvenance provenance = 6;
}

message PreviewCreateDefaultsResponse {
  // Unique canonical fields ordered by ascending bytewise UTF-8 API name.
  repeated CreateDefaultField fields = 1;
  nexuscrm.common.v1.ConsistencyReceipts receipts = 2;
}
