import type UNTraceConfiguration from "./UNTraceConfiguration.js";
import type { CircuitStatus } from "./typeUtils.js";

/** @since 5.0 */
export type UtilityNetworkFeatureClassUsageType = "esriUNFCUTDevice" | "esriUNFCUTJunction" | "esriUNFCUTLine" | "esriUNFCUTAssembly" | "esriUNFCUTSubnetLine" | "esriUNFCUTStructureJunction" | "esriUNFCUTStructureLine" | "esriUNFCUTStructureBoundary" | "esriUNFCUTJunctionObject" | "esriUNFCUTEdgeObject" | "esriUNFCUTStructureJunctionObject" | "esriUNFCUTStructureEdgeObject" | "esriUNFCUTCircuit" | "esriUNFCUTCircuitSection" | "esriUNFCUTSubcircuit";

/** @since 5.1 */
export type DividePolicyType = "esriDPTUnitApportioned" | "esriDPTDefaultValue";

/** @since 5.1 */
export type CombinePolicyType = "esriCPTSumValues" | "esriCPTDefaultValue";

/**
 * Uniquely identifies an element by network source ID and global ID.
 *
 * @since 4.34
 */
export interface UnitIdentifier {
  /**
   * The element's network source ID.
   *
   * @since 5.0
   */
  sourceId: number;
  /**
   * The element's global ID.
   *
   * @since 5.0
   */
  globalId: string;
}

/**
 * A range of unit identifiers in a container feature or object's containment hierarchy.
 *
 * @since 4.34
 */
export interface UnitRange {
  /**
   * The unit offset in the grouped object.
   *
   * @since 5.0
   */
  firstUnit: number;
  /**
   * The last unit in the unit identifier range.
   *
   * @since 5.0
   */
  lastUnit: number;
  /**
   * Whether the unit identifier range is a gap, i.e., is not utilized.
   *
   * @since 5.0
   */
  isGap: boolean;
  /**
   * The object consuming the unit identifiers in this range.
   *
   * @since 5.0
   */
  content?: UnitIdentifier | null;
}

/**
 * Results returned from the [CircuitManager.export()](https://developers.arcgis.com/javascript/latest/references/core/networks/CircuitManager/#export) method.
 *
 * @since 4.34
 */
export interface CircuitExportResult {
  /**
   * The name of the exported circuit.
   *
   * @since 5.0
   */
  circuitName: string;
  /**
   * The location of the exported circuit JSON file.
   *
   * @since 5.0
   */
  url: string;
  /**
   * Indicates if the default trace configuration has been modified.
   *
   * @since 5.1
   */
  isDefaultTraceConfigurationModified: boolean;
  /**
   * The status of the exported circuit.
   *
   * @since 5.1
   */
  status: CircuitStatus;
  /**
   * Indicates if the export was successful.
   *
   * @since 5.0
   */
  success: boolean;
  /**
   * Optional error information if the export failed.
   *
   * @since 5.0
   */
  error?: CircuitExportResultError;
}

/** @since 5.0 */
export interface CircuitExportResultError {
  /**
   * Error message.
   *
   * @since 5.0
   */
  message: string;
  /**
   * Extended error code.
   *
   * @since 5.0
   */
  extendedCode: number;
  /**
   * Additional error details.
   *
   * @since 5.0
   */
  details: string[];
}

/**
 * AssetTypeJSON represents [asset type](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/utility-feature-classification.htm#GUID-A4CCEB96-C4F8-459B-A763-FF6A5791F663).
 * Attribute domains are assigned on the asset type field at the subtype level for each network class. It represents the minor classification of the utility network classes.
 *
 * @since 5.0
 */
export interface AssetTypeJSON {
  /**
   * The unique code for the asset type.
   *
   * @since 5.0
   */
  assetTypeCode: number;
  /**
   * The name of the asset type.
   *
   * @since 5.0
   */
  assetTypeName?: string;
  /**
   * Indicates if terminal configurations are supported for the asset type.
   *
   * @since 5.0
   */
  isTerminalConfigurationSupported?: boolean;
  /**
   * The terminal configuration ID associated with the asset type, if applicable.
   *
   * @since 5.0
   */
  terminalConfigurationId?: number;
  /**
   * The connectivity policy applied to the asset type.
   *
   * @since 5.0
   */
  connectivityPolicy?: string;
}

/**
 * AssetGroupJSON represents the [asset group](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/utility-feature-classification.htm#GUID-A4CCEB96-C4F8-459B-A763-FF6A5791F663).
 * The asset group is the subtype field and represents the major classification of utility network classes.
 *
 * @since 5.0
 */
export interface AssetGroupJSON {
  /**
   * The unique code for the asset group.
   *
   * @since 5.0
   */
  assetGroupCode: number;
  /**
   * The asset group name.
   *
   * @since 5.0
   */
  assetGroupName?: string;
  /**
   * An array of asset types associated with the asset group.
   *
   * @since 5.0
   */
  assetTypes: AssetTypeJSON[];
}

/** @since 5.0 */
export interface CircuitSourceJSON {
  /**
   * The layer id of the point layer.
   *
   * @since 5.0
   */
  layerId: number;
  /**
   * The network source id of the layer.
   *
   * @since 5.0
   */
  sourceId: number;
  /**
   * The usage type of the edge source.
   *
   * @since 5.0
   */
  utilityNetworkFeatureClassUsageType: UtilityNetworkFeatureClassUsageType;
}

/**
 * JunctionSourceJSON represents the point layers that participate in the utility network service.
 *
 * @since 5.0
 */
export interface NetworkSourceJSON extends CircuitSourceJSON {
  /**
   * The asset group attribute values for the point layer.
   *
   * @since 5.0
   */
  assetGroups: AssetGroupJSON[];
  /**
   * Supported properties for the edge source.
   *
   * @since 5.0
   */
  supportedProperties: string[];
  /**
   * Indicates if the source uses geometry.
   *
   * @since 5.1
   */
  usesGeometry: boolean;
}

/**
 * Describes a domain network in a utility network data element.
 *
 * @since 4.34
 */
export interface DomainNetworkJSON {
  /**
   * The name of the domain network.
   *
   * @since 5.0
   */
  domainNetworkName: string;
  /**
   * Indicates if this domain network is a structure network.
   *
   * @since 5.0
   */
  isStructureNetwork: boolean;
  /**
   * Indicates if this domain network is a telecom domain network.
   *
   * @since 5.0
   */
  isTelecomNetwork: boolean;
  /**
   * An array of network source objects that represent the sources of junction features.
   *
   * @since 5.0
   */
  junctionSources: NetworkSourceJSON[];
  /**
   * An array of network source objects that represent the sources of edge features.
   *
   * @since 5.0
   */
  edgeSources: NetworkSourceJSON[];
  /**
   * An array of tier definitions used to organize the network into hierarchical levels. Null if no tiers are defined, e.g., a telecom domain network.
   *
   * @since 5.0
   */
  tiers?: TierJSON[] | null;
  /**
   * The layer ID of the subnetwork layer. Null if no subnetwork layer is defined, e.g., a telecom domain network.
   *
   * @since 5.0
   */
  subnetworkLayerId?: number | null;
  /**
   * An array of circuit source objects for telecom networks.
   *
   * @since 5.0
   */
  circuitSources?: CircuitSourceJSON[] | null;
  /**
   * Circuit properties for telecom networks.
   *
   * @since 5.0
   */
  circuitProperties?: CircuitPropertiesJSON | null;
  /**
   * An array of objects to describe color schemes in a telecom domain network.
   *
   * @since 5.0
   */
  colorSchemes?: ColorSchemeJSON[] | null;
  /**
   * An array of objects describing divide policies for a telecom domain network.
   *
   * @since 5.0
   */
  dividePolicies?: DividePolicyJSON[] | null;
  /**
   * An array of objects describing combine policies.
   *
   * @since 5.0
   */
  combinePolicies?: CombinePolicyJSON[] | null;
  /**
   * A UNTraceConfiguration object that defines the trace configuration for the domain network.
   *   This configuration includes parameters specific to utility networks.
   *
   * @since 5.0
   */
  traceConfiguration?: UNTraceConfiguration | null;
  /**
   * An array of objects representing color sets in a telecom domain network.
   *
   * @since 5.1
   */
  colorSets: ColorSetJSON[];
  /**
   * An array of objects representing wavelength schemes in a telecom domain network.
   *
   * @since 5.1
   */
  wavelengthSchemes: WavelengthSchemeJSON[];
}

/** @since 5.1 */
export interface WavelengthSchemeJSON {
  /**
   * The unique ID for the wavelength scheme.
   *
   * @since 5.1
   */
  id: number;
  /**
   * The name of the wavelength scheme.
   *
   * @since 5.1
   */
  name: string;
  /**
   * An array of objects representing wavelengths in the wavelength scheme.
   *
   * @since 5.1
   */
  wavelengths: WavelengthJSON[];
}

/** @since 5.1 */
export interface WavelengthJSON {
  /**
   * The unique ID for the wavelength.
   *
   * @since 5.1
   */
  id: number;
  /**
   * The name of the wavelength.
   *
   * @since 5.1
   */
  name: string;
  /**
   * The numeric value of the wavelength
   *
   * @since 5.1
   */
  length: number;
}

/** @since 5.0 */
export interface CircuitPropertiesJSON {
  /**
   * The type of the property set.
   *
   * @since 5.0
   */
  type: "PropertySet";
  /**
   * The items in the property set.
   *
   * @since 5.0
   */
  propertySetItems: (string | boolean)[];
}

/** @since 5.0 */
export interface ColorSchemeJSON {
  /**
   * The name of the color scheme.
   *
   * @since 5.0
   */
  name: string;
  /**
   * The id of the color scheme.
   *
   * @since 5.0
   */
  id: number;
  /**
   * The ID of the color set associated with the color scheme.
   *
   * @since 5.1
   */
  colorSetId: number;
  /**
   * The group delimiter.
   *
   * @since 5.0
   */
  groupDelimiter: string;
  /**
   * The number of levels in the color scheme.
   *
   * @since 5.0
   */
  levels: number;
  /**
   * An array of objects representing color groups in the color scheme.
   *
   * @since 5.1
   */
  groups: ColorSchemeGroupJSON[];
}

/** @since 5.1 */
export interface ColorSetJSON {
  /**
   * The unique ID for the color set.
   *
   * @since 5.1
   */
  id: number;
  /**
   * The name of the color set.
   *
   * @since 5.1
   */
  name: string;
  /**
   * An array of objects representing color codes in the color set.
   *
   * @since 5.1
   */
  colorCodes: ColorCodeJSON[];
}

/** @since 5.1 */
export interface ColorCodeJSON {
  /**
   * The unique ID for the color code.
   *
   * @since 5.1
   */
  id: number;
  /**
   * The name of the color code.
   *
   * @since 5.1
   */
  name: string;
  /**
   * The label for the color code.
   *
   * @since 5.1
   */
  label: string;
  /**
   * An array of hex codes representing the color code.
   *
   * @since 5.1
   */
  hexCodes: string[];
}

/** @since 5.1 */
export interface ColorSchemeGroupJSON {
  /**
   * The name of the color group.
   *
   * @since 5.1
   */
  name: string;
  /**
   * The level of the color group.
   *
   * @since 5.1
   */
  level: number;
  /**
   * The delimiter for the color group.
   *
   * @since 5.1
   */
  delimiter: string;
  /**
   * The capacity for the color group.
   *
   * @since 5.1
   */
  capacity: number[];
  /**
   * An array of color code IDs associated with the color group.
   *
   * @since 5.1
   */
  colorCodeIds?: number[];
}

/** @since 5.1 */
export interface DividePolicyJSON {
  /**
   * The source ID for the policy.
   *
   * @since 5.1
   */
  sourceId: number;
  /**
   * The attribute name for the policy.
   *
   * @since 5.1
   */
  attributeName: string;
  /**
   * The policy type.
   *
   * @since 5.1
   */
  policy: DividePolicyType;
}

/** @since 5.1 */
export interface CombinePolicyJSON {
  /**
   * The source ID for the policy.
   *
   * @since 5.1
   */
  sourceId: number;
  /**
   * The attribute name for the policy.
   *
   * @since 5.1
   */
  attributeName: string;
  /**
   * The policy type.
   *
   * @since 5.1
   */
  policy: CombinePolicyType;
}

/** @since 5.1 */
export interface TierJSON {
  /**
   * The name of the tier.
   *
   * @since 5.0
   */
  name: string;
}

/** @since 5.0 */
export interface TerminalConfigurationJSON {
  /**
   * The Id that uniquely identifies the terminal configuration.
   *
   * @since 5.0
   */
  terminalConfigurationId: number;
}

/**
 * Contains the full network definition.
 *
 * @since 4.33
 */
export interface NetworkDataElementJSON {
  /**
   * An array of domain networks included in the utility network.
   *
   * @since 5.0
   */
  domainNetworks: DomainNetworkJSON[];
  /**
   * The user identity associated with the network definition.
   *
   * @since 5.0
   */
  userIdentity: string;
  /**
   * The name of the utility network.
   *
   * @since 5.0
   */
  name: string;
  /**
   * The schema generation version number of the utility network.
   *
   * @since 5.0
   */
  schemaGeneration: number;
  /**
   * An array of terminal configuration objects available in the network.
   *
   * @since 5.0
   */
  terminalConfigurations: TerminalConfigurationJSON[];
  /**
   * The layer Id of the feature layer representing service territories within the network.
   *
   * @since 5.0
   */
  serviceTerritoryFeatureLayerId: number;
}

/** @since 5.0 */
export type FunctionType = "add" | "subtract" | "average" | "count" | "min" | "max";

/** @since 5.0 */
export type ConditionType = "networkAttribute" | "category";

/** @since 5.0 */
export type OperatorType = "equal" | "notEqual" | "greaterThan" | "greaterThanEqual" | "lessThan" | "lessThanEqual" | "includesTheValues" | "doesNotIncludeTheValues" | "includesAny" | "doesNotIncludeAny";

/**
 * Contains the [Barrier](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/barriers.htm) information in JSON format.
 *
 * @since 5.0
 */
export interface BarrierJSON {
  /**
   * The name of the barrier.
   *
   * @since 5.0
   */
  name: string;
  /**
   * The type of the barrier.
   *
   * @since 5.0
   */
  type: ConditionType;
  /**
   * The type of the operator used in the barrier.
   *
   * @since 5.0
   */
  operator: OperatorType;
  /**
   * The value used by the barrier when evaluating network attributes or categories.
   *
   * @since 5.0
   */
  value: string;
  /**
   * Indicates whether this barrier is combined with other barriers using OR (`true`) or AND (`false`).
   *
   * @since 5.0
   */
  combineUsingOr: boolean;
  /**
   * Indicates whether the barrier evaluates a specific value.
   *
   * @since 5.0
   */
  isSpecificValue: boolean;
}

/**
 * Contains the condition information in JSON format. Conditions are used to define the criteria for barriers in a utility network trace.
 *
 * @since 5.0
 */
export interface ConditionJSON {
  /**
   * The name of the condition.
   *
   * @since 5.0
   */
  name: string;
  /**
   * The type of the condition.
   *
   * @since 5.0
   */
  type: ConditionType;
  /**
   * The type of the operator used in the condition.
   *
   * @since 5.0
   */
  operator: OperatorType;
  /**
   * The value used by the condition when evaluating network attributes or categories.
   *
   * @since 5.0
   */
  value: string;
  /**
   * Indicates whether this condition is combined with other conditions using OR (`true`) or AND (`false`).
   *
   * @since 5.0
   */
  combineUsingOr: boolean;
  /**
   * Indicates whether the condition evaluates a specific value.
   *
   * @since 5.0
   */
  isSpecificValue: boolean;
}

/**
 * Contains the output condition information in JSON format. Output conditions define which traced features are returned.
 *
 * @since 5.0
 */
export interface OutputConditionJSON {
  /**
   * The name of the output condition.
   *
   * @since 5.0
   */
  name: string;
  /**
   * The type of the output condition.
   *
   * @since 5.0
   */
  type: ConditionType;
  /**
   * The type of the operator used in the output condition.
   *
   * @since 5.0
   */
  operator: OperatorType;
  /**
   * The value used by the output condition when evaluating network attributes or categories.
   *
   * @since 5.0
   */
  value: string;
  /**
   * Indicates whether this output condition is combined with other conditions using OR (`true`) or AND (`false`).
   *
   * @since 5.0
   */
  combineUsingOr: boolean;
  /**
   * Indicates whether the output condition evaluates a specific value.
   *
   * @since 5.0
   */
  isSpecificValue: boolean;
}

/**
 * Contains the [function](https://doc.esri.com/en/arcgis-pro/latest/help/data/utility-network/configure-a-trace.html#CBB) information in JSON format.
 *
 * @since 5.0
 */
export interface FunctionJSON {
  /**
   * An alias to describe and provide context for the function output.
   *
   * @since 5.1
   */
  functionName?: string | null;
  /**
   * The type of function used for the calculation.
   *
   * @since 5.0
   */
  functionType: FunctionType;
  /**
   * The network attribute name used by the function.
   *
   * @since 5.0
   */
  networkAttributeName: string;
  /**
   * The set of conditions used to filter elements included in the function calculation.
   *
   * @since 5.0
   */
  conditions: ConditionJSON[];
}

/**
 * Contains the [function barrier](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/barriers.htm#ESRI_SECTION1_F224BC2C2FC3488D840952275B4FDB35) information in JSON format.
 *
 * @since 5.0
 */
export interface FunctionBarrierJSON {
  /**
   * The type of function used for evaluating the barrier.
   *
   * @since 5.0
   */
  functionType: FunctionType;
  /**
   * The network attribute name used by the function barrier.
   *
   * @since 5.0
   */
  networkAttributeName: string;
  /**
   * The type of the operator used in the function barrier.
   *
   * @since 5.0
   */
  operator: OperatorType;
  /**
   * The value used to evaluate the function barrier.
   *
   * @since 5.0
   */
  value: string;
}

/**
 * Contains asset information in JSON format.
 *
 * @since 5.0
 */
export interface AssetJSON {
  /**
   * The network source ID of the asset.
   *
   * @since 5.0
   */
  networkSourceId: number;
  /**
   * The asset group code of the asset.
   *
   * @since 5.0
   */
  assetGroupCode: number;
  /**
   * The asset type code of the asset.
   *
   * @since 5.0
   */
  assetTypeCode: number;
}

/**
 * The properties below are returned by the nearestNeighbor object when using `Describe` on a utility network.
 *
 * @since 5.0
 */
export interface NearestNeighborJSON {
  /**
   * If the filter nearest function is being used, this is the value of the number of features to be returned.
   * If the filter nearest function is not being used, this property returns a -1 value.
   *
   * @since 5.0
   */
  count: number;
  /**
   * If the filter nearest function is being used, this is the name of the network attribute that is being used to calculate the cost.
   * If the filter nearest function is not being used, this property returns an empty string.
   *
   * @since 5.0
   */
  costNetworkAttributeName: string;
  /**
   * If the filter nearest function is being used, these are the names of the categories that will be returned.
   * If the filter nearest function is not being used, this property returns an empty list.
   *
   * @since 5.0
   */
  nearestCategories: string[];
  /**
   * The nearestAssets object. If the filter nearest function is being used, these are the asset groups and asset types that will be returned.
   * If the filter nearest function is not being used, this property returns an empty list.
   *
   * @since 5.0
   */
  nearestAssets: AssetJSON[];
}

/**
 * Propagators define how values are propagated during a trace.
 *
 * @since 5.0
 */
export interface PropagatorJSON {
  /**
   * The name of the network attribute used to filter the propagator condition.
   *
   * @since 5.0
   */
  networkAttributeName: string;
  /**
   * The network attribute used for substitution.
   *
   * @since 5.0
   */
  substitutionAttributeName: string;
  /**
   * The type of function used for propagation, such as `bitwiseAnd`, `min`, or `max`.
   *
   * @since 5.0
   */
  propagatorfunctionType: "bitwiseAnd" | "min" | "max";
  /**
   * The operator used for propagation (for example, equal to or less than).
   *
   * @since 5.0
   */
  operator: OperatorType;
  /**
   * The specific value of the network attribute or category used for propagation.
   *
   * @since 5.0
   */
  value: string;
  /**
   * The name of the field used to store calculated propagated values.
   *
   * @since 5.0
   */
  propagatedAttributeName: string;
}

/**
 * Specifies the type of results to return after running a trace.
 *
 * @since 5.0
 * @example
 * // Creates a new instance of this class and initializes it with values inputted in json format. A resultTypes object is passed into the resultTypes property.
 * const traceParameters = TraceParameters.fromJSON({
 *    traceConfigurationGlobalId: "{DF22DA8D-6EC0-408B-A8B2-E468EC7DC9BF}",
 *    moment: 1554214441244,
 *    gdbVersion: "SDE.DEFAULT",
 *    resultTypes: [
 *      {
 *        type: "elements",
 *        includeGeometry: false,
 *        includePropagatedValues: false,
 *        networkAttributeNames: [],
 *        diagramTemplateName: "",
 *        resultTypeFields: []
 *      },
 *      {
 *        type: "aggregatedGeometry",
 *        includeGeometry: false,
 *        includePropagatedValues: false,
 *        networkAttributeNames: [],
 *        diagramTemplateName: "",
 *        resultTypeFields: []
 *      }
 *    ],
 *    traceType: "subnetwork"
 *  });
 */
export interface ResultType {
  /**
   * Specifies the return type for the trace.
   *
   * @since 5.0
   */
  type: "elements" | "aggregatedGeometry" | "paths" | "circuits";
  /**
   * Specifies whether to return flow directions for network edges.
   * Intended for use with subnetwork based traces where flow is modeled using subnetwork controllers.
   *
   * @since 5.1
   * @see [NetworkElement.flowDirection](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/NetworkElement/#flowDirection)
   */
  includeFlowDirections?: boolean;
  /**
   * Specifies whether to return geometry values in resultTypes.
   *
   * @since 5.0
   */
  includeGeometry: boolean;
  /**
   * Specifies whether to return propagated values in resultTypes.
   *
   * @since 5.0
   */
  includePropagatedValues: boolean;
  /**
   * Specifies the network attribute names.
   *
   * @since 5.0
   */
  networkAttributeNames: string[];
  /**
   * Specifies the name of a predefined Diagram Template.
   *
   * @since 5.0
   */
  diagramTemplateName: string;
  /**
   * Specifies the types of output fields that can be generated from geoprocessing tools.
   *
   * @since 5.0
   */
  resultTypeFields: Object[];
}

/**
 * Specifies the type of results to export for circuits.
 *
 * @since 5.0
 * @example
 * const exportCircuitProperties = {
 *   circuitNames: ["TESTCIRCUIT"],
 *   exportAcknowledgement: false,
 *   resultTypes: [
 *     {
 *       type: "features",
 *       includeGeometry: true,
 *       includeDomainDescriptions: true,
 *       networkAttributeNames: ["Asset group", "Asset type"],
 *       diagramTemplateName: "",
 *       resultTypeFields: [
 *         { networkSourceId: 20, fieldName: "FIRSTUNIT" },
 *         { networkSourceId: 20, fieldName: "LASTUNIT" },
 *       ],
 *     },
 *   ],
 * };
 *
 * const exportResult = await circuitManager.export(exportCircuitProperties);
 */
export interface ExportCircuitsResultType {
  /**
   * The return type for the export.
   *
   * @since 5.0
   */
  type: "features" | "connectivity" | "associations" | "circuits";
  /**
   * Whether to include geometry values in the export.
   *
   * @since 5.0
   */
  includeGeometry: boolean;
  /**
   * Specifies whether domain descriptions will be included in the output file
   * to communicate domain mapping for features and connectivity.
   *
   * @since 5.0
   */
  includeDomainDescriptions: boolean;
  /**
   * The network attributes that will be included in the result.
   *
   * @since 5.0
   */
  networkAttributeNames: string[];
  /**
   * The name of a predefined diagram template.
   *
   * @since 5.0
   */
  diagramTemplateName: string;
  /**
   * The feature class and field name values to include in the export.
   *
   * @since 5.0
   */
  resultTypeFields: Record<string, any>[];
}

/**
 * ValidationSetItemJSON represents the set of features and objects to validate.
 *
 * @since 5.0
 * @example
 * const validationResult = await network.submitTopologyValidationJob(
 *   new ValidateNetworkTopologyParameters({
 *     validateArea: extent,
 *     gdbVersion: "sde.DEFAULT",
 *     validationType: "rebuild",
 *     sessionID: "{7865BAA6-ED9C-4346-9F72-894A49E10C73}",
 *     validationSet: [
 *       {
 *         sourceId: 4134325151,
 *         globalIds: ["{7865BAA6-ED9C-4346-9F72-894A49E10C73}"]
 *       }
 *     ]
 *   })
 * );
 *
 * console.log("result: ", validationResult);
 */
export interface ValidationSetItemJSON {
  /**
   * The network source id of the.
   *
   * @since 5.0
   */
  sourceId: number;
  /**
   * An array of globalId strings to validate.
   *
   * @since 5.0
   */
  globalIds: string[];
}