import type Extent from "../../../geometry/Extent.js";
import type SpatialReference from "../../../geometry/SpatialReference.js";
import type { JSONSupport } from "../../../core/JSONSupport.js";
import type { ValidationSetItemJSON } from "../../../networks/support/jsonTypes.js";
import type { ValidationType } from "../../../networks/support/typeUtils.js";
import type { ExtentProperties } from "../../../geometry/Extent.js";
import type { SpatialReferenceProperties } from "../../../geometry/SpatialReference.js";

export interface ValidateNetworkTopologyParametersProperties extends Partial<Pick<ValidateNetworkTopologyParameters, "gdbVersion" | "sessionID" | "validationSet" | "validationType">> {
  /** The spatial reference of the returned geometry. If not specified, the geometry is returned in the spatial reference of the feature service. */
  outSpatialReference?: SpatialReferenceProperties | null;
  /** Specifies the envelope of the area to validate. This property is required. */
  validateArea?: ExtentProperties;
}

/**
 * ValidateNetworkTopologyParameters describes the optional and required parameters for validating a network topology. Optional parameters include [gdbVersion](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/ValidateNetworkTopologyParameters/#gdbVersion), [sessionID](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/ValidateNetworkTopologyParameters/#sessionID), [validationType](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/ValidateNetworkTopologyParameters/#validationType),
 * and [validationSet](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/ValidateNetworkTopologyParameters/#validationSet). The only required property is [validateArea](https://developers.arcgis.com/javascript/latest/references/core/rest/networks/support/ValidateNetworkTopologyParameters/#validateArea).
 *
 * @since 4.26
 * @see [UtilityNetwork](https://developers.arcgis.com/javascript/latest/references/core/networks/UtilityNetwork/)
 * @see [Network](https://developers.arcgis.com/javascript/latest/references/core/networks/Network/)
 * @see [ArcGIS Pro: Validate a network topology](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/validate-a-network-topology.htm#:~:text=You%20can%20validate%20the%20network,Validate%20Network%20Topology%20geoprocessing%20tool.)
 * @see [ArcGIS Pro: Network topology](https://pro.arcgis.com/en/pro-app/latest/help/data/utility-network/about-network-topology.htm)
 * @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 default class ValidateNetworkTopologyParameters extends JSONSupport {
  constructor(properties?: ValidateNetworkTopologyParametersProperties);
  /** Specifies the geodatabase version name. Defaults to `SDE.DEFAULT` when no version is provided. */
  accessor gdbVersion: string | null | undefined;
  /** The spatial reference of the returned geometry. If not specified, the geometry is returned in the spatial reference of the feature service. */
  get outSpatialReference(): SpatialReference | null | undefined;
  set outSpatialReference(value: SpatialReferenceProperties | null | undefined);
  /** Specifies the GUID used to lock the version. If the client is editing `SDE.DEFAULT`, the `sessionID` should not be used because this version cannot be locked. */
  accessor sessionID: string | null | undefined;
  /** Specifies the envelope of the area to validate. This property is required. */
  get validateArea(): Extent;
  set validateArea(value: ExtentProperties);
  /**
   * Specifies the set of features and objects to validate.
   *
   * > [!WARNING]
   * >
   * > **Note**
   * >
   * > This parameter is available at [ArcGIS Enterprise 10.9](https://enterprise.arcgis.com/en/get-started/10.9/windows/what-is-arcgis-enterprise-.htm).
   */
  accessor validationSet: ValidationSetItemJSON[] | null | undefined;
  /** Specifies the validation to perform. */
  accessor validationType: ValidationType | null | undefined;
}