import type FloorFilter from "./widgets/FloorFilter.js";
import type TimeSlider from "./widgets/TimeSlider.js";
import type { JSONSupport, JSONSupportMixinProperties } from "../core/JSONSupport.js";
import type { TimeSliderProperties } from "./widgets/TimeSlider.js";
import type { FloorFilterProperties } from "./widgets/FloorFilter.js";

export interface WidgetsProperties extends JSONSupportMixinProperties {
  /** Floor filtering is controlled by a configurable [floor filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html). Those configurations are saved to the web map as a [FloorFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-widgets-FloorFilter.html) widget. */
  floorFilter?: FloorFilterProperties | null;
  /** Time animation is controlled by a configurable [time slider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html). Those configurations are saved to the web map/web scene as a [TimeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-widgets-TimeSlider.html) widget. */
  timeSlider?: TimeSliderProperties | null;
}

/** The widgets object contains widgets that are exposed to the user. */
export default abstract class Widgets extends JSONSupport {
  /** Floor filtering is controlled by a configurable [floor filter](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-FloorFilter.html). Those configurations are saved to the web map as a [FloorFilter](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-widgets-FloorFilter.html) widget. */
  get floorFilter(): FloorFilter | null | undefined;
  set floorFilter(value: FloorFilterProperties | null | undefined);
  /** Time animation is controlled by a configurable [time slider](https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-TimeSlider.html). Those configurations are saved to the web map/web scene as a [TimeSlider](https://developers.arcgis.com/javascript/latest/api-reference/esri-webdoc-widgets-TimeSlider.html) widget. */
  get timeSlider(): TimeSlider | null | undefined;
  set timeSlider(value: TimeSliderProperties | null | undefined);
}