import type TimeSeriesInfo from "../support/TimeSeriesInfo.js";
import type { TimeSeriesInfoProperties } from "../support/TimeSeriesInfo.js";

export interface DataSeriesLayerProperties {
  /**
   * An array of objects that define data series configurations for the layer. A data series
   * describes a series of fields that represent a sequence of related data points over time or other dimensions.
   * Client applications can use the information in a data series info to generate expressions for renderers,
   * labels, popups, charts, or for other representations of the data to display in the web map. These may be
   * defined and referenced by name in client applications for use in various contexts.
   *
   * @default null
   * @example
   * layer.dataSeriesInfos = [{
   *   type: "time-series-fields",
   *   name: "ts0",
   *   title: "U.S. National Park Annual Visitation Numbers (10 year increments, 1910-2020)",
   *   fieldTimeMappings: [
   *     {
   *       fieldName: "F1910",
   *       timeValue: "1910"
   *     },
   *     {
   *       fieldName: "F1920",
   *       timeValue: "1920"
   *     },
   *     {
   *       fieldName: "F1930",
   *       timeValue: "1930"
   *     },
   *     {
   *       fieldName: "F1940",
   *       timeValue: "1940"
   *     },
   *     {
   *       fieldName: "F1950",
   *       timeValue: "1950"
   *     },
   *     {
   *       fieldName: "F1960",
   *       timeValue: "1960"
   *     },
   *     {
   *       fieldName: "F1970",
   *       timeValue: "1970"
   *     },
   *     {
   *       fieldName: "F1980",
   *       timeValue: "1980"
   *     },
   *     {
   *       fieldName: "F1990",
   *       timeValue: "1990"
   *     },
   *     {
   *       fieldName: "F2000",
   *       timeValue: "2000"
   *     },
   *     {
   *       fieldName: "F2010",
   *       timeValue: "2010"
   *     },
   *     {
   *       fieldName: "F2020",
   *       timeValue: "2020"
   *     }
   *   ],
   *   timeInterval: 1,
   *   timeValueUnits: "years",
   *   timeIntervalUnits: "decades",
   *   timeExtent: {
   *     start: new Date("1910-01-01"),
   *     end: new Date("2020-01-01")
   *   }
   * }];
   */
  dataSeriesInfos?: TimeSeriesInfoProperties[] | null;
}

/**
 * Mixin for layers that support data series configurations.
 *
 * @since 5.1
 */
export abstract class DataSeriesLayer {
  constructor(...args: any[]);
  /**
   * An array of objects that define data series configurations for the layer. A data series
   * describes a series of fields that represent a sequence of related data points over time or other dimensions.
   * Client applications can use the information in a data series info to generate expressions for renderers,
   * labels, popups, charts, or for other representations of the data to display in the web map. These may be
   * defined and referenced by name in client applications for use in various contexts.
   *
   * @default null
   * @example
   * layer.dataSeriesInfos = [{
   *   type: "time-series-fields",
   *   name: "ts0",
   *   title: "U.S. National Park Annual Visitation Numbers (10 year increments, 1910-2020)",
   *   fieldTimeMappings: [
   *     {
   *       fieldName: "F1910",
   *       timeValue: "1910"
   *     },
   *     {
   *       fieldName: "F1920",
   *       timeValue: "1920"
   *     },
   *     {
   *       fieldName: "F1930",
   *       timeValue: "1930"
   *     },
   *     {
   *       fieldName: "F1940",
   *       timeValue: "1940"
   *     },
   *     {
   *       fieldName: "F1950",
   *       timeValue: "1950"
   *     },
   *     {
   *       fieldName: "F1960",
   *       timeValue: "1960"
   *     },
   *     {
   *       fieldName: "F1970",
   *       timeValue: "1970"
   *     },
   *     {
   *       fieldName: "F1980",
   *       timeValue: "1980"
   *     },
   *     {
   *       fieldName: "F1990",
   *       timeValue: "1990"
   *     },
   *     {
   *       fieldName: "F2000",
   *       timeValue: "2000"
   *     },
   *     {
   *       fieldName: "F2010",
   *       timeValue: "2010"
   *     },
   *     {
   *       fieldName: "F2020",
   *       timeValue: "2020"
   *     }
   *   ],
   *   timeInterval: 1,
   *   timeValueUnits: "years",
   *   timeIntervalUnits: "decades",
   *   timeExtent: {
   *     start: new Date("1910-01-01"),
   *     end: new Date("2020-01-01")
   *   }
   * }];
   */
  get dataSeriesInfos(): TimeSeriesInfo[] | null | undefined;
  set dataSeriesInfos(value: TimeSeriesInfoProperties[] | null | undefined);
}