/**
 * Engine-neutral 3D camera view used by the public API and element variations.
 * Angles are expressed in degrees to keep integrations independent from Babylon.
 */
export interface AsukaCameraView {
  /** Horizontal orbit angle in degrees. */
  turn: number;
  /** Vertical angle in degrees above the horizon. Negative values place the camera below it. */
  tilt: number;
  /** Distance between the camera and its target. */
  distance: number;
  /** World-space point observed by the camera. */
  target: [number, number, number];
  /** Optional vertical field of view in degrees. */
  fov?: number;
}

/** Runtime orbit constraints for one 3D view. */
export interface AsukaCameraLimits {
  /** Lowest allowed vertical angle in degrees above the horizon. */
  minTilt: number;
  /** Highest allowed vertical angle in degrees above the horizon. */
  maxTilt: number;
  /** Maximum horizontal rotation in degrees on either side of turnCenter. 180 means a full orbit. */
  maxTurn: number;
  /** Horizontal center angle used by maxTurn. */
  turnCenter: number;
}

/** Options used when moving the 3D camera. */
export interface AsukaCameraMoveOptions {
  /** Animate the transition. Defaults to true. */
  animate?: boolean;
  /** Transition duration in milliseconds. */
  duration?: number;
  /** Optional integration/debug source. */
  source?: string;
}
