import ComponentBase from '../../utils/componentbase/ComponentBase';

declare namespace MouseWheelZoom {
    /**
     * Configuration options for mouse-wheel zoom control.
     */
    interface IConfig {
        /**
         * Target camera, camera index, or camera name.
         */
        camera?: string | number | Phaser.Cameras.Scene2D.Camera,

        /**
         * Zoom delta applied per mouse-wheel step.
         */
        zoomStep?: number,
        /**
         * Zoom easing duration in milliseconds.
         */
        easeDuration?: number,

        /**
         * Minimum allowed zoom value.
         */
        minZoom?: number,
        /**
         * Maximum allowed zoom value.
         */
        maxZoom?: number,

        /**
         * Set to true to enable mouse-wheel zoom.
         */
        enable?: boolean,
    }
}

/**
 * Camera controller that zooms camera by mouse wheel input.
 */
declare class MouseWheelZoom extends ComponentBase {
    /**
     * Create a mouse-wheel zoom controller.
     *
     * @param scene - Scene that owns this controller.
     * @param config - Optional controller configuration.
     */
    constructor(
        scene: Phaser.Scene,
        config?: MouseWheelZoom.IConfig
    );

    /**
     * Enable or disable mouse-wheel zoom.
     *
     * @param enable - True to enable, false to disable.
     * @returns This controller instance.
     */
    setEnable(enable?: boolean): this;
    /**
     * Current enabled state.
     */
    enable: boolean;

    /**
     * Set target camera instance.
     *
     * @param camera - Camera to control.
     * @returns This controller instance.
     */
    setCamera(camera?: Phaser.Cameras.Scene2D.Camera): this;
    /**
     * Current target camera.
     */
    camera?: Phaser.Cameras.Scene2D.Camera;

    /**
     * Reset camera zoom to default level.
     *
     * @returns This controller instance.
     */
    resetZoomLevel(): this;

    /**
     * Set minimum zoom constraint.
     *
     * @param value - Minimum zoom value.
     * @returns This controller instance.
     */
    setMinZoom(value?: number): this;
    /**
     * Minimum zoom constraint.
     */
    minZoom: number;

    /**
     * Set maximum zoom constraint.
     *
     * @param value - Maximum zoom value.
     * @returns This controller instance.
     */
    setMaxZoom(value?: number): this;
    /**
     * Maximum zoom constraint.
     */
    maxZoom: number;

}

export default MouseWheelZoom;
