import type { TLayoutManagerDefinition } from "../../Builder/types/SurfaceDefinitions";
import type { Thickness } from "../../Core/Thickness";
import type { EAutoColorMode } from "../../types/AutoColorMode";
import type { ESciChartSurfaceType } from "../../types/SciChartSurfaceType";
import type { ESubChartClippingMode } from "../../types/SubChartClippingMode";
import type { TSubSurfaceCoordinateMode } from "../../types/SubSurfaceCoordinateMode";
import type { TSubSurfacePosition } from "../../types/SubSurfacePosition";
import type { TBorder } from "../../types/TBorder";
import type { TChartTitleStyle } from "../../types/TextStyle";
import type { ISurfaceOptionsBase } from "./SciChartSurfaceBase";
/**
 * Options passed to a {@link SciChartPolarSurface} in the {@link SciChartPolarSurface.create} function
 */
export interface I2DPolarSurfaceOptions extends I2DSurfaceOptions {
    /**
     * drawSeriesBehindAxis property is not supported for {@link SciChartPolarSurface}
     */
    drawSeriesBehindAxis?: boolean;
}
/**
 * Options passed to a {@link SciChartSurface} in the {@link SciChartSurface.create} function
 */
export interface I2DSurfaceOptions extends ISurfaceOptionsBase {
    /**
     * Optional - Prove a layoutManager to customise the axis layout.  Use CentralAxesLayoutManager for an easy way to configure central axes.
     */
    layoutManager?: TLayoutManagerDefinition;
    /**
     * Optional - Padding between the SciChartSurface and its inner elements. Default 10
     */
    padding?: Thickness;
    /**
     * Optional - Properties of the viewport border (where series are drawn)
     */
    viewportBorder?: TBorder;
    /**
     * Optional - Properties of the canvas border
     */
    canvasBorder?: TBorder;
    drawSeriesBehindAxis?: boolean;
    /**
     * Optional - An {@link EAutoColorMode} which controls how often series colours set to AUTO_COLOR will be resolved.  Default OnAddRemoveSeries
     */
    autoColorMode?: EAutoColorMode;
    /**
     * Optional a title for the SciChartSurface
     */
    title?: string | string[];
    /**
     * The title text style and placement for the SciChartSurface as {@link TChartTitleStyle}
     */
    titleStyle?: TChartTitleStyle;
    /**
     * Surface Background as an HTML color code;
     * @remarks A sub-chart only supports plain color without gradients
     */
    background?: string;
    /**
     * @experimental
     *  Optional - enabling prevents chart rendering until {@link SciChartSurface.resume} is called on the surface instance
     */
    createSuspended?: boolean;
}
export interface I2DSubSurfaceOptions extends I2DSurfaceOptions {
    surfaceType?: ESciChartSurfaceType;
    /**
     * A rectangle defining the position and size of a subchart.
     * First two points define xStart and yStart, second two are width and height.
     * If {@link coordinateMode} is Relative (the default) then the values give the size as a proportion of the parent div, and all properties must be between 0 and 1 inclusive.
     * If {@link coordinateMode} is DataValue, values will be converted to coordinates using {@link parentXAxisId} and {@link parentYAxisId}. Subchart will be clpped to the parent SeriesViewRect
     * Can only be set if this is a subChart.  See {@link addSubChart}
     */
    position?: TSubSurfacePosition;
    /** An id or div element that will wrap the subchart.  This can contain top, left, bottom and right section divs.  The chart will shrink to fit the sections  */
    subChartContainerId?: string | HTMLDivElement;
    /** Whether other surfaces, including the parent, will be visible underneath this surface  */
    isTransparent?: boolean;
    /** Sets if the subchart is visible, allowing you to hide a subchart without removing it from the parent surface */
    isVisible?: boolean;
    /**
     * Gets or sets the {@link TSubSurfaceCoordinateMode} used when calculating the actual position based on the {@link subPosition}.
     * @default Relative
     */
    coordinateMode?: TSubSurfaceCoordinateMode;
    /** The clipping mode of the sub-chart */
    clippingMode?: ESubChartClippingMode;
    /**
     * Sets the AxisId used to determing which X Axis should be used when calculating the actual position based on the {@link subPosition}
     * if {@link coordinateMode} is DataValue
     */
    parentXAxisId?: string;
    /**
     * Sets the AxisId used to determing which Y Axis should be used when calculating the actual position based on the {@link subPosition}
     * if {@link coordinateMode} is DataValue
     */
    parentYAxisId?: string;
    /**
     * Gets or sets scale property for all sections
     */
    sectionScale?: number;
}
