import type AltitudeConstraint from "./AltitudeConstraint.js";
import type ClipDistanceConstraint from "./ClipDistanceConstraint.js";
import type TiltConstraint from "./TiltConstraint.js";
import type { Clonable } from "../../../core/Clonable.js";
import type { TiltConstraintProperties } from "./TiltConstraint.js";
import type { AltitudeConstraintProperties } from "./AltitudeConstraint.js";
import type { ClipDistanceConstraintProperties } from "./ClipDistanceConstraint.js";

/** @since 5.0 */
export interface ConstraintsProperties {
  /**
   * Specifies a constraint on the minimum and maximum allowed camera altitude.
   * > [!WARNING]
   * >
   * > **Known Limitations**
   * >
   * > The `altitude` constraint is only supported in scenes with `global` [viewing mode](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#viewingMode).
   *
   * @since 5.0
   */
  altitude?: AltitudeConstraintProperties;
  /**
   * Specifies the near and far webgl clip distances.
   *
   * @since 5.0
   */
  clipDistance?: ClipDistanceConstraintProperties;
  /**
   * Specifies a constraint on the amount of allowed tilting of the view.
   *
   * @since 5.0
   */
  tilt?: TiltConstraintProperties;
}

/** @since 5.0 */
export default class Constraints extends Clonable {
  constructor(properties?: ConstraintsProperties);
  /**
   * Specifies a constraint on the minimum and maximum allowed camera altitude.
   * > [!WARNING]
   * >
   * > **Known Limitations**
   * >
   * > The `altitude` constraint is only supported in scenes with `global` [viewing mode](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#viewingMode).
   *
   * @since 5.0
   */
  get altitude(): AltitudeConstraint;
  set altitude(value: AltitudeConstraintProperties);
  /**
   * Specifies the near and far webgl clip distances.
   *
   * @since 5.0
   */
  get clipDistance(): ClipDistanceConstraint;
  set clipDistance(value: ClipDistanceConstraintProperties);
  /**
   * Specifies a constraint on the amount of allowed tilting of the view.
   *
   * @since 5.0
   */
  get tilt(): TiltConstraint;
  set tilt(value: TiltConstraintProperties);
}