import type { ChartModel } from "../chart-model/chart-model.js";
import type { RESTSimpleLineSymbolStyle, RESTSimpleMarkerSymbolStyle } from "../../spec/rest-js-object-literals.js";
import type { Color } from "../../spec/rest-js-types.js";

export abstract class ModelWithLineMarkerStyling extends ChartModel {
  /**
   * Specify the color of the filled area for line chart.
   * **Note:** `areaColor` will be applied only if `showArea` is true, and is defaulted to the line color if not provided.
   *
   * @param seriesIndex - The index of the series.
   */
  getAreaColor(seriesIndex: number): Color | undefined;
  /**
   * Specify the color of the filled area for line chart.
   *
   * @param seriesIndex - The index of the series.
   */
  getConnectLines(seriesIndex: number): boolean | undefined;
  /**
   * Gets the line style of the series based on the series index. If the index is out of bounds, it will return `undefined`.
   *
   * @param seriesIndex - The index of the series.
   */
  getSeriesLineStyle(seriesIndex: number): RESTSimpleLineSymbolStyle | undefined;
  /**
   * Gets the line width of the series based on the series index. If the index is out of bounds, it will return `undefined`.
   *
   * @param seriesIndex - The index of the series.
   */
  getSeriesLineWidth(seriesIndex: number): number | undefined;
  /**
   * Gets the marker color of the series based on the series index. If the index is out of bounds, it will return `undefined`.
   *
   * @param seriesIndex - The index of the series.
   * @returns Color | undefined
   */
  getSeriesMarkerColor(seriesIndex: number): Color | undefined;
  /**
   * Gets the marker size of the series based on the series index. If the index is out of bounds, it will return `undefined`.
   *
   * @param seriesIndex - The index of the series.
   */
  getSeriesMarkerSize(seriesIndex: number): number | undefined;
  /**
   * Gets the marker style of the series based on the series index. If the index is out of bounds, it will return `undefined`.
   *
   * @param seriesIndex - The index of the series.
   */
  getSeriesMarkerStyle(seriesIndex: number): RESTSimpleMarkerSymbolStyle | undefined;
  /**
   * Specify whether the line series should show area.
   *
   * @param seriesIndex - The index of the series.
   */
  isAreaVisible(seriesIndex: number): boolean;
  /**
   * Specify whether line segments of the series should be smoothed.
   *
   * @param seriesIndex - The index of the series.
   */
  isLineSmoothed(seriesIndex: number): boolean;
  /**
   * Indicate whether to show or hide the markers/bullets of the line series.
   *
   * @param seriesIndex - The index of the series.
   */
  isMarkerVisible(seriesIndex: number): boolean;
  /**
   * Specify the color of the filled area for line chart.
   *
   * @param color - The color of the filled area for line chart.
   * @param seriesIndex - The index of the series.
   */
  setAreaColor(color: Color | undefined, seriesIndex: number): void;
  /**
   * Specify whether the line series should show area.
   *
   * @param visible - `true` if the line series should show area, `false` otherwise.
   * @param seriesIndex - The index of the series.
   */
  setAreaVisible(visible: boolean, seriesIndex: number): void;
  /**
   * Specify whether to connect the lines when there's a gap in the data.
   * **Note:** Can be overridden by the temporal data setting `nullPolicy`.
   *
   * @param connect - Whether to connect the gap in the data
   * @param seriesIndex - The index of the series.
   */
  setConnectLines(connect: boolean | undefined, seriesIndex: number): void;
  /**
   * Specify whether line segments of the series should be smoothed.
   *
   * @param smoothed - `true` if line segment of the series should be smoothed, `false` otherwise.
   * @param seriesIndex - The index of the series.
   */
  setLineSmoothed(smoothed: boolean, seriesIndex: number): void;
  /**
   * Indicate whether to show or hide the markers/bullets of the line series.
   *
   * @param visible - `true` if the markers/bullets of the line series should be shown, `false` otherwise.
   * @param seriesIndex - The index of the series.
   */
  setMarkerVisible(visible: boolean, seriesIndex: number): void;
  /**
   * Sets the line style of the series based on the series index.
   *
   * @param style - The new style for the series.
   * @param seriesIndex - The index of the series.
   */
  setSeriesLineStyle(style: RESTSimpleLineSymbolStyle | undefined, seriesIndex: number): void;
  /**
   * Sets the line width of the series based on the series index.
   *
   * @param width - The new width for the series.
   * @param seriesIndex - The index of the series.
   */
  setSeriesLineWidth(width: number | undefined, seriesIndex: number): void;
  /**
   * Sets the marker color of the series based on the series index.
   *
   * @param color - The new color for the series.
   * @param seriesIndex - The index of the series.
   */
  setSeriesMarkerColor(color: Color | undefined, seriesIndex: number): void;
  /**
   * Sets the marker size of the series based on the series index.
   *
   * @param size - The new size for the series.
   * @param seriesIndex - The index of the series.
   */
  setSeriesMarkerSize(size: number | undefined, seriesIndex: number): void;
  /**
   * Sets the marker style of the series based on the series index.
   *
   * @param style - The new style for the series.
   * @param seriesIndex - The index of the series.
   */
  setSeriesMarkerStyle(style: RESTSimpleMarkerSymbolStyle | undefined, seriesIndex: number): void;
}