import { Chart, ChartType } from "chart.js";

export interface CursorPosition {
    previousX?: number;
    previousY?: number;
    x?: number;
    y?: number;
}

export interface CursorLineOptions {
    color: string;
    width: number;
    dashPattern: number[];
}

export interface CursorOptions {
    enabled: boolean;
    visible?: boolean;
    positions?: CursorPosition[];
    line?: CursorLineOptions;
    startTime?: number;
    callbacks?: {
        afterMove?: (positions: CursorPosition[]) => void;
    };
}

export interface CursorState {
    enabled: boolean;
    visible: boolean;
    startTime: number | undefined;
    suppressUpdate: boolean;
    ignoreNextEvents: number;
    selected: number;
    positions: CursorPosition[];
    centreCursors: (chart: Chart) => void;
    setStartTime: (time: number) => void;
    hitTest: (x: number, y: number, threshold: number) => number;
}

declare module "chart.js" {
    interface Chart {
        cursors: CursorState;
    }
    interface PluginOptionsByType<TType extends ChartType> {
        cursors?: CursorOptions;
    }
    interface Plugin<TType extends ChartType> {
        drawCursors: (chart: Chart) => void;
        centreCursors: (chart: Chart) => void;
        hitTestCursor: (chart: Chart, x: number, y: number, threshold: number) => number;
    }
}
