import { Bezier } from 'bezier-js';

interface Point {
    x: number;
    y: number;
}
interface BezierMouseOptions {
    deviation?: number;
    flip?: boolean;
    steps?: number;
    preciseClick?: boolean;
}
type ClickType = "LEFT" | "MIDDLE" | "RIGHT";

declare class BezierMouse {
    private mouseSpeed;
    private nutJsModule;
    constructor(mouseSpeed?: number);
    private getNutJs;
    moveAndClick(initPos: Point, finPos: Point, clickType?: ClickType, opts?: BezierMouseOptions): Promise<void>;
    moveAndDoubleClick(initPos: Point, finPos: Point, clickType?: ClickType, opts?: BezierMouseOptions): Promise<void>;
    move(initPos: Point, finPos: Point, opts?: BezierMouseOptions): Promise<void>;
    bezierCurveTo(initPos: Point, finPos: Point, opts?: BezierMouseOptions): Point[];
    cubicBezierCurve(initPos: Point, finPos: Point, opts?: BezierMouseOptions): Bezier;
    getBezierControlPoint(initPos: Point, finPos: Point, opts?: BezierMouseOptions): Point;
}

declare function choice<T>(items: T[]): T;
declare function randint(min: number, max: number): number;
declare const utils: {
    choice: typeof choice;
    randint: typeof randint;
};

// @ts-ignore
export = BezierMouse;
export { BezierMouse, type BezierMouseOptions, type ClickType, type Point, utils };
