import type { ModelParams } from "../interfaces/chart-interfaces.js";
import type { ModelTypes } from "../interfaces/common.js";
import type { ChartModel } from "../chart-model/chart-model.js";
import type { WithColorMatch } from "../properties/color-match.js";
import type { WithDataLabelsVisibility } from "../properties/data-labels/data-labels-visibility.js";
import type { WithDataLabelsSymbol } from "../properties/data-labels/data-labels-symbol.js";
import type { WithAxisLabelsSymbol } from "../properties/axes/axis-labels-symbol.js";
import type { WithAxisLinesSymbol } from "../properties/axes/axis-lines-symbol.js";
import type { WithXBounds } from "../properties/axes/x-axis/x-bounds.js";
import type { WithXAxisLabelsVisibility } from "../properties/axes/x-axis/x-axis-labels-visibility.js";
import type { WithXAxisTitleSymbol } from "../properties/axes/x-axis/x-axis-title-symbol.js";
import type { WithXAxisTitleText } from "../properties/axes/x-axis/x-axis-title-text.js";
import type { WithXAxisTitleVisibility } from "../properties/axes/x-axis/x-axis-title-visibility.js";
import type { WithGenerateXAxisTitle } from "../properties/axes/x-axis/generate-x-axis-title.js";
import type { ChartConfig } from "../../utils/types/index.js";
import type { ScatterplotOverlays, SizePolicy } from "../../spec/web-chart.js";
import type { ISimpleLineSymbol, ISimpleMarkerSymbol } from "../../spec/rest-js-types.js";
import type { ModelWithMultiAxes } from "../mixins/model-with-multi-axes.js";
import type { ModelWithLegend } from "../mixins/model-with-legend.js";
import type { ModelWithTooltips } from "../mixins/model-with-tooltips.js";
import type { ModelWithXGuides } from "../mixins/model-with-x-guides.js";
import type { ModelWithYGuides } from "../mixins/model-with-y-guides.js";

export class ScatterplotModel extends ScatterplotModelSuperclass {
  /**
   * Add an additional field to display for scatterplot tooltips.
   *
   * **Note**: Only numeric fields are supported.
   */
  get additionalTooltipField(): string[] | string;
  set additionalTooltipField(value: string[] | string | undefined);
  /** Marker symbol used for the scatterplot points when using a fixed symbol (i.e. no size policy is set). */
  accessor fixedMarkerSymbol: ISimpleMarkerSymbol;
  /** Line symbol for the linear trend line. */
  accessor linearTrendSymbol: ISimpleLineSymbol;
  /** Trendline overlay for the scatterplot. */
  accessor seriesOverlays: ScatterplotOverlays | undefined;
  /** Whether the linear trend line is shown. */
  accessor showLinearTrend: boolean;
  /** Size policy for the scatterplot points. This is used to scale the size of the marker symbol based on a given field. */
  accessor sizePolicy: SizePolicy | undefined;
  /** X-axis field. */
  accessor xAxisField: string;
  /** Y-axis field. */
  accessor yAxisField: string;
  /** Generate the proper chart title given the current config. */
  generateChartTitle(): string;
  /** Generate the proper y-axis title given the current config. */
  generateYAxisTitle(): string;
  /**
   * Completes the async setup process for the chart model. Must be called before using the model.
   *
   * @param params
   */
  setup(params: ModelParams<ChartConfig<typeof ModelTypes.Scatterplot>>): Promise<void>;
}
declare const ScatterplotModelSuperclass: typeof ChartModel & typeof WithGenerateXAxisTitle & typeof WithAxisLinesSymbol & typeof WithAxisLabelsSymbol & typeof WithXAxisTitleSymbol & typeof WithXBounds & typeof WithXAxisTitleVisibility & typeof WithXAxisLabelsVisibility & typeof WithXAxisTitleText & typeof ModelWithYGuides & typeof ModelWithXGuides & typeof WithDataLabelsSymbol & typeof WithDataLabelsVisibility & typeof WithColorMatch & typeof ModelWithTooltips & typeof ModelWithLegend & typeof ModelWithMultiAxes