import type Color from "../../Color.js";
import type ElevationProfileLineChartOptions from "./ElevationProfileLineChartOptions.js";
import type ElevationProfileLineViewOptions from "./ElevationProfileLineViewOptions.js";
import type { ColorLike } from "../../Color.js";
import type { ElevationProfileLineChartOptionsProperties } from "./ElevationProfileLineChartOptions.js";
import type { ElevationProfileLineViewOptionsProperties } from "./ElevationProfileLineViewOptions.js";
import type { ElevationProfileLineType } from "./types.js";
import type { Clonable } from "../../core/Clonable.js";

export interface ElevationProfileLineProperties extends Partial<Pick<ElevationProfileLine, "enabled" | "id" | "title">> {
  /** Options for visualizing the profile line in a chart. */
  chartOptions?: ElevationProfileLineChartOptionsProperties;
  /**
   * Color of the line as displayed in the chart and in the view.
   *
   * @default "#000000"
   */
  color?: ColorLike;
  /** Options for visualizing the profile line in the view. */
  viewOptions?: ElevationProfileLineViewOptionsProperties;
}

/**
 * Base class for configuring a single line in an elevation profile analysis.
 *
 * Each profile line represents a different source or method for sampling elevation along the input path. Subclasses
 * define the specific behavior for ground, input geometry, custom elevation sources, or scene content.
 *
 * @since 4.34
 * @see [ElevationProfileAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/ElevationProfileAnalysis/)
 * @see [ElevationProfileLineGround](https://developers.arcgis.com/javascript/latest/references/core/analysis/ElevationProfile/ElevationProfileLineGround/)
 * @see [ElevationProfileLineInput](https://developers.arcgis.com/javascript/latest/references/core/analysis/ElevationProfile/ElevationProfileLineInput/)
 * @see [ElevationProfileLineQuery](https://developers.arcgis.com/javascript/latest/references/core/analysis/ElevationProfile/ElevationProfileLineQuery/)
 * @see [ElevationProfileLineScene](https://developers.arcgis.com/javascript/latest/references/core/analysis/ElevationProfile/ElevationProfileLineScene/)
 */
export default abstract class ElevationProfileLine extends Clonable {
  /** Options for visualizing the profile line in a chart. */
  get chartOptions(): ElevationProfileLineChartOptions;
  set chartOptions(value: ElevationProfileLineChartOptionsProperties);
  /**
   * Color of the line as displayed in the chart and in the view.
   *
   * @default "#000000"
   */
  get color(): Color;
  set color(value: ColorLike);
  /**
   * Indicates whether the line should be computed and displayed in the chart and view.
   *
   * @default true
   */
  accessor enabled: boolean;
  /** Unique identifier for the profile line. This value is automatically generated unless specified. */
  accessor id: string;
  /** Title of the line, shown in the chart tooltip and legend. */
  accessor title: string | null | undefined;
  /** The type of profile line. This property is set by subclasses and determines the source of elevation data for the line. */
  readonly type: ElevationProfileLineType;
  /** Options for visualizing the profile line in the view. */
  get viewOptions(): ElevationProfileLineViewOptions;
  set viewOptions(value: ElevationProfileLineViewOptionsProperties);
}