import ContainerLite from '../containerlite/ContainerLite';

export default ImageBox;

declare namespace ImageBox {

    /**
     * Configuration options for creating an ImageBox.
     */
    interface IConfig {
        /**
         * X position.
         */
        x?: number,
        /**
         * Y position.
         */
        y?: number,
        /**
         * Texture key for the image.
         */
        texture?: string,
        /**
         * Frame key for the image.
         */
        frame?: string,

        /**
         * Allow the image to scale up to fit.
         */
        scaleUp?: boolean,
        /**
         * Width of the container.
         */
        width?: number,
        /**
         * Height of the container.
         */
        height?: number,

        /**
         * Background game object.
         */
        background?: Phaser.GameObjects.GameObject,
        /**
         * Image game object.
         */
        image?: Phaser.GameObjects.GameObject,

    }
}

/**
 * A container that displays an image with optional background.
 */
declare class ImageBox extends ContainerLite {
    /**
     * Create an ImageBox with texture and frame.
     *
     * @param scene - The Phaser.Scene that owns this ImageBox.
     * @param x - X position.
     * @param y - Y position.
     * @param texture - Texture key.
     * @param frame - Frame key.
     * @param config - Configuration options.
     */
    constructor(
        scene: Phaser.Scene,
        x?: number,
        y?: number,
        texture?: string,
        frame?: string,
        config?: ImageBox.IConfig
    );

    /**
     * Create an ImageBox with position and config.
     *
     * @param scene - The Phaser.Scene that owns this ImageBox.
     * @param x - X position.
     * @param y - Y position.
     * @param config - Configuration options.
     */
    constructor(
        scene: Phaser.Scene,
        x?: number,
        y?: number,
        config?: ImageBox.IConfig
    );

    /**
     * Create an ImageBox with config only.
     *
     * @param scene - The Phaser.Scene that owns this ImageBox.
     * @param config - Configuration options.
     */
    constructor(
        scene: Phaser.Scene,
        config?: ImageBox.IConfig
    );

    /**
     * Image game object.
     */
    image: Phaser.GameObjects.GameObject;

    /**
     * Set the image texture and frame.
     *
     * @param texture - Texture key.
     * @param frame - Frame key.
     * @returns This ImageBox instance.
     */
    setTexture(
        texture?: string,
        frame?: string
    ): this;
    /**
     * Current texture.
     */
    readonly texture: Phaser.Textures.Texture | Phaser.Textures.CanvasTexture;
    /**
     * Current frame.
     */
    readonly frame: Phaser.Textures.Frame;

    /**
     * Set horizontal flip.
     *
     * @param value - True to flip horizontally.
     * @returns This ImageBox instance.
     */
    setFlipX(value: boolean): this;
    /**
     * Set vertical flip.
     *
     * @param value - True to flip vertically.
     * @returns This ImageBox instance.
     */
    setFlipY(value: boolean): this;
    /**
     * Toggle horizontal flip.
     *
     * @returns This ImageBox instance.
     */
    toggleFlipX(): this;
    /**
     * Toggle vertical flip.
     *
     * @returns This ImageBox instance.
     */
    toggleFlipY(): this;
    /**
     * Set both horizontal and vertical flip.
     *
     * @param x - True to flip horizontally.
     * @param y - True to flip vertically.
     * @returns This ImageBox instance.
     */
    setFlip(x: boolean, y: boolean): this;
    /**
     * Whether the image is flipped horizontally.
     */
    flipX: boolean;
    /**
     * Whether the image is flipped vertically.
     */
    flipY: boolean;
}
