import StatesImage from '../../statesimage/StatesImage';
import StatesNineSlice from '../../statesnineslice/StatesNineSlice';
import StatesNinePatch from '../../statesninepatch/StatesNinePatch';
import StatesRoundRectangle from '../../statesroundrectangle/StatesRoundRectangle';

export default CreateImage;

declare namespace CreateImage {
    /**
     * Configuration for creating a state-aware image object.
     */
    interface IImage extends StatesImage.IConfig {
        /** Alpha value of the image. */
        alpha?: number,
        /** Tint color applied to the image. */
        tint?: number,
        /** Set to true to flip the image horizontally. */
        flipX?: boolean,
        /** Set to true to flip the image vertically. */
        flipY?: boolean,
        /** Uniform origin applied to both X and Y axes. */
        origin?: number,
        /** Origin value on the X axis. */
        originX?: number,
        /** Origin value on the Y axis. */
        originY?: number,
    }

    /**
     * Configuration for creating a state-aware nine-slice object.
     */
    interface INineSlice extends StatesNineSlice.IConfig {
        /** Alpha value of the nine-slice object. */
        alpha?: number,
        /** Tint color applied to the nine-slice object. */
        tint?: number,
        /** Uniform origin applied to both X and Y axes. */
        origin?: number,
        /** Origin value on the X axis. */
        originX?: number,
        /** Origin value on the Y axis. */
        originY?: number,
    }

    /**
     * Configuration for creating a state-aware round rectangle object.
     */
    interface IRoundRectangle extends StatesRoundRectangle.IConfig {
        /** Alpha value of the round rectangle object. */
        alpha?: number,
        /** Uniform origin applied to both X and Y axes. */
        origin?: number,
        /** Origin value on the X axis. */
        originX?: number,
        /** Origin value on the Y axis. */
        originY?: number,
    }

    /**
     * Configuration for creating a state-aware nine-patch object.
     */
    interface INinePatch extends StatesNinePatch.IConfig {
        /** Alpha value of the nine-patch object. */
        alpha?: number,
        /** Tint color applied to the nine-patch object. */
        tint?: number,
        /** Uniform origin applied to both X and Y axes. */
        origin?: number,
        /** Origin value on the X axis. */
        originX?: number,
        /** Origin value on the Y axis. */
        originY?: number,
    }

    /**
     * Supported configuration variants for creating an image-like object.
     */
    type IConfig = IImage | INineSlice | IRoundRectangle | INinePatch;
}

/**
 * Create an image-like game object from the provided configuration.
 *
 * @param scene - The Phaser scene that owns the created object.
 * @param config - Optional image configuration variant.
 * @returns The created state-aware image object.
 */
declare function CreateImage(
    scene: Phaser.Scene,
    config?: CreateImage.IConfig,
): StatesImage;
