import type BinParametersBase from "./BinParametersBase.js";
import type { BinParametersBaseProperties } from "./BinParametersBase.js";
import type { NormalizationBinParametersMixinProperties, NormalizationBinParametersMixin } from "./NormalizationBinParametersMixin.js";

export interface FixedIntervalBinParametersProperties extends BinParametersBaseProperties, NormalizationBinParametersMixinProperties, Partial<Pick<FixedIntervalBinParameters, "end" | "interval" | "start">> {}

/**
 * FixedIntervalBinParameters specifies [AttributeBinsQuery.binParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttributeBinsQuery.html#binParameters) on [AttributeBinsQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttributeBinsQuery.html) object.
 * For the [FixedIntervalBinParameters](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FixedIntervalBinParameters.html), the number of bins is not important but the [interval](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-FixedIntervalBinParameters.html#interval)
 * size must match with the input data. This means that each bin will cover a range that exactly fits the specified interval. The fixed interval binning works with numeric
 * fields and fields of the `date` type only. It does not support `timestamp-offset`, `date-only`, or `time-only` field types.
 *
 * For example, if you want to visualize the distribution temperature data in a specific area using fixed intervals of 5 degrees, you can use fixed interval bins to categorize
 * the data effectively:
 *
 * ```js
 * // Query bins with fixed interval bin parameters based on field "temp" with 5 degrees interval.
 * const binQuery = new AttributeBinsQuery({
 *   binParameters: new FixedIntervalBinParameters({
 *     interval: 5, // the interval size for each bin. In this case, 5 degrees celsius
 *     field: "temp", // the field to bin, containing the temperature data
 *     start: 0, // the lower boundary of the first bin. 0 degrees celsius
 *     end: 30 // the upper boundary of the last bin. 30 degrees celsius
 *   })
 * });
 * ```
 *
 * <figure>
 *   <img src="https://developers.arcgis.com/javascript/latest/assets/img/apiref/rest/binQuery/fixed-interval-bin.png" alt="fixed-interval" style="width:400px;"/>
 *   <figcaption>Temperature ranges at sea level for each Ecological Marine Units (EMU) in 2018 are depicted, with each bin representing a 5-degree Celsius interval. The chart is based on the results of the binQuery illustrated above.</figcaption>
 * </figure>
 *
 * @since 4.32
 * @see [AttributeBinsQuery](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-AttributeBinsQuery.html)
 */
export default class FixedIntervalBinParameters extends FixedIntervalBinParametersSuperclass {
  constructor(properties?: FixedIntervalBinParametersProperties);
  /** The end value of bins to generate. */
  accessor end: number | Date | null | undefined;
  /**
   * Represents the interval of values to be included in each bin.
   * For example, if you want to visualize the distribution temperature data in a specific area using fixed intervals of 5 degrees, you can set the interval to 5.
   */
  accessor interval: number;
  /** The start value of bins to generate. */
  accessor start: number | Date | null | undefined;
  /** The type of bin parameters. */
  readonly type: "fixed-interval";
}
declare const FixedIntervalBinParametersSuperclass: typeof BinParametersBase & typeof NormalizationBinParametersMixin