import type CircuitLocation from "../../../../networks/support/CircuitLocation.js";
import type { JSONSupport } from "../../../../core/JSONSupport.js";
import type { CircuitHierarchy, CircuitStatus } from "../../../../networks/support/typeUtils.js";
import type { CircuitLocationProperties } from "../../../../networks/support/CircuitLocation.js";

/** @since 5.0 */
export interface QueryCircuitsParametersProperties extends Partial<Pick<QueryCircuitsParameters, "circuitHierarchy" | "circuitStatus" | "locationType">> {
  /**
   * The list of locations to query circuits by.
   *
   * @since 5.1
   */
  locations?: CircuitLocationProperties[] | null;
}

/** @since 5.0 */
export default class QueryCircuitsParameters extends JSONSupport {
  constructor(properties?: QueryCircuitsParametersProperties);
  /**
   * Specifies whether to return the associated consumer and provider circuits with the queried circuit.
   *
   * @default "none"
   * @since 5.1
   */
  accessor circuitHierarchy: CircuitHierarchy;
  /**
   * Specifies whether to filter the result of the query to return only circuits of a certain status.
   *
   * @since 5.1
   */
  accessor circuitStatus: CircuitStatus | null | undefined;
  /**
   * The list of locations to query circuits by.
   *
   * @since 5.1
   */
  get locations(): CircuitLocation[] | null | undefined;
  set locations(value: CircuitLocationProperties[] | null | undefined);
  /**
   * The type of location to query circuits by.
   *
   * @since 5.0
   */
  accessor locationType: "start" | "stop" | "all" | null | undefined;
}