import { Scene } from "@plattar/plattar-api";
export type SceneProductDataMetaType = "sceneproduct" | "scenemodel" | "product";
export interface SceneProductData {
    scene_product_id: string;
    product_variation_id: string;
    meta_data: SceneProductDataMeta;
}
export interface SceneProductDataMeta {
    augment: boolean;
    type: SceneProductDataMetaType;
}
export interface DecodedConfiguratorState {
    readonly scene: Scene;
    readonly state: ConfiguratorState;
}
/**
 * Manages a Configuration State of multiple Products with multiple Variations
 * Allows easily changing
 */
export declare class ConfiguratorState {
    private readonly _state;
    private readonly _mappedVariationIDValues;
    private readonly _mappedVariationSKUValues;
    constructor(state?: string | null | undefined);
    /**
     * Modifyes the SceneProduct that this Variation SKU belongs to and changes for
     * purposes of Configuration
     */
    setVariationSKU(productVariationSKU: string): void;
    /**
     * Modifyes the SceneProduct that this Variation belongs to and changes for
     * purposes of Configuration
     */
    setVariationID(productVariationID: string): void;
    /**
     * Adds a new Scene Product/Variation combo with meta-data into the Configurator State
     *
     * @param sceneProductID - The Scene Product ID to be used (as defined in Plattar CMS)
     * @param productVariationID - The Product Variation ID to be used (as defined in Plattar CMS)
     * @param metaData - Arbitrary meta-data that can be used against certain operaions
     */
    setSceneProduct(sceneProductID: string, productVariationID: string, metaData?: SceneProductDataMeta | null | undefined): void;
    /**
     * Adds a new SceneModel with meta-data into the Configurator State. Note that the SceneProductDataMeta will
     * override the isSceneModel variable and assign to "true" automatically
     *
     * @param SceneModelID - The SceneModel ID to add
     * @param metaData - Arbitrary meta-data that can be used against certain operaions
     */
    setSceneModel(SceneModelID: string, metaData?: SceneProductDataMeta | null | undefined): void;
    /**
     * Adds a new Product with meta-data into the Configurator State
     *
     * @param productID - The Product ID to add
     * @param metaData - Arbitrary meta-data that can be used against certain operaions
     */
    setProduct(productID: string, productVariationID: string, metaData?: SceneProductDataMeta | null | undefined): void;
    /**
     * Adds a new Scene Product/Variation combo with meta-data into the Configurator State
     *
     * @param sceneProductID - The Scene Product ID to be used (as defined in Plattar CMS)
     * @param productVariationID - The Product Variation ID to be used (as defined in Plattar CMS)
     * @param metaData - Arbitrary meta-data that can be used against certain operaions
     */
    addSceneProduct(sceneProductID: string, productVariationID: string, metaData?: SceneProductDataMeta | null | undefined): void;
    /**
     * Search and return the data index reference for the provided Scene Product ID
     * if not found, will return null
     * @param sceneProductID
     */
    findSceneProductIndex(sceneProductID: string): any[] | null;
    /**
     * Search and return the data for the provided Scene Product ID
     * if not found, will return null
     * @param sceneProductID
     */
    findSceneProduct(sceneProductID: string): SceneProductData | null;
    /**
     * Iterate over the internal state data
     */
    forEach(callback: (data: SceneProductData) => void): void;
    /**
     * Compose and return an array of all internal objects
     */
    array(): Array<SceneProductData>;
    /**
     * @returns Returns the first reference of data in the stack, otherwise returns null
     */
    first(): SceneProductData | null;
    /**
     * @returns Returns the first reference of data in the stack that matches a type, otherwise returns null
     */
    firstOfType(type: SceneProductDataMetaType): SceneProductData | null;
    firstActiveOfType(type: SceneProductDataMetaType): SceneProductData | null;
    get length(): number;
    /**
     * Decodes and returns an instance of ConfiguratorState from a previously
     * encoded state
     * @param state - The previously encoded state as a Base64 String
     * @returns - ConfiguratorState instance
     */
    static decode(state: string): ConfiguratorState;
    /**
     * Decodes a previously generated state
     * @param sceneID
     * @param state
     * @returns
     */
    static decodeState(sceneID?: string | null | undefined, state?: string | null | undefined): Promise<DecodedConfiguratorState>;
    /**
     * Generates a new ConfiguratorState instance from all SceneProducts and default
     * variations from the provided Scene ID
     * @param sceneID - the Scene ID to generate
     * @returns - Promise that resolves into a ConfiguratorState instance
     */
    static decodeScene(sceneID?: string | null | undefined): Promise<DecodedConfiguratorState>;
    /**
     * Encode and return the internal ConfiguratorState as a Base64 String
     * @returns - Base64 String
     */
    encode(): string;
    encodeSceneGraphID(): Promise<string>;
    /**
     * Compiles and returns the Dynamic Scene Graph (Updated for 2025 for DynamicAR)
     * NOTE: Eventually this structure should replace ConfiguratorState
     */
    get sceneGraph(): any;
}
