import type { Command } from "../Command.js";
import { CommandRegistry } from "../CommandRegistry.js";
import type * as DotNetTypes from "../DotNetTypes.js";
import type { Event } from "../Event.js";
import { EventRegistry } from "../EventRegistry.js";
import type { Operation } from "../Operation.js";
import { OperationRegistry } from "../OperationRegistry.js";
/**
 * Information about a specific app. Only available in VertiGIS Studio Mobile.
 */
export interface GcxAppInfo {
}
/**
 * Arguments for the app started events. Only available in VertiGIS Studio
 * Mobile.
 */
export interface SpecificAppArgs {
    /**
     * A unique identifier for the app.
     */
    uniqueKey: string;
    /**
     * The amount of time that the app took to load.
     */
    loadTime: DotNetTypes.TimeSpan;
}
/**
 * Arguments for the app.generic.apps-listed event. Only available in VertiGIS
 * Studio Mobile.
 */
export interface GenericAppsListedArgs {
    /**
     * The number of dev apps available.
     */
    devApps: number;
    /**
     * The number of test apps available.
     */
    testApps: number;
    /**
     * The number of staging apps available.
     */
    stagingApps: number;
    /**
     * The number of production apps available.
     */
    productionApps: number;
    /**
     * The total number of apps available.
     */
    totalApps: number;
}
export declare class AppCommands extends CommandRegistry {
    protected readonly _prefix = "app";
    /**
     * Returns to the app selector view where the user can select a different
     * app. Only enabled if the current app was launched through VertiGIS Studio
     * Go. Mobile only.
     *
     * @mobileOnly
     */
    get goToAppSelector(): Command;
    /**
     * Refreshes the currently loaded app so that it can download updates if
     * available. Mobile only.
     *
     * @mobileOnly
     */
    get refresh(): Command;
    /**
     * Stores data specified by the arguments (key and scope). Mobile only.
     *
     * @mobileOnly
     */
    get setPersistentData(): Command<SaveStorageDataArgs>;
    /**
     * Adds the currently loaded app to the user's Favorites collection. Mobile
     * only.
     *
     * @mobileOnly
     */
    get favorite(): Command;
    /**
     * Removes the currently loaded app from the user's Favorites collection.
     * Mobile only.
     *
     * @mobileOnly
     */
    get unfavorite(): Command;
}
export declare class AppEvents extends EventRegistry {
    readonly custom: AppCustomEvents;
    readonly generic: AppGenericEvents;
    protected readonly _prefix = "app";
    /**
     * Raised when the app is started, restored from a background state, layout
     * switched, or restored from an interrupted state. Mobile only.
     *
     * @mobileOnly
     */
    get activated(): Event;
    /**
     * Raised when the app is backgrounded. Mobile only.
     *
     * @mobileOnly
     */
    get backgrounded(): Event;
    /**
     * Raised when the app is interrupted temporarily (e.g. Pull down
     * notifications, control center, or OS level prompt or alert). Mobile
     * only.
     *
     * @mobileOnly
     */
    get interrupted(): Event;
    /**
     * Raised when returning to the app selector screen from a specific app in
     * VertiGIS Studio Go. Mobile only.
     *
     * @mobileOnly
     */
    get goingToAppSelector(): Event;
    /**
     * Raised when an app has been refreshed. Mobile only.
     *
     * @mobileOnly
     */
    get refreshed(): Event<SpecificAppArgs>;
    /**
     * Raised when an app refresh is beginning. Mobile only.
     *
     * @mobileOnly
     */
    get refreshing(): Event;
    /**
     * Raised when an app is favorited. Mobile only.
     *
     * @mobileOnly
     */
    get favorited(): Event<GcxAppInfo>;
    /**
     * Raised when an app is unfavorited. Mobile only.
     *
     * @mobileOnly
     */
    get unfavorited(): Event<GcxAppInfo>;
}
export declare class AppCustomEvents extends EventRegistry {
    protected readonly _prefix = "app.custom";
    /**
     * Raised when a custom app is started. Mobile only.
     *
     * @mobileOnly
     */
    get started(): Event<SpecificAppArgs>;
}
export declare class AppGenericEvents extends EventRegistry {
    protected readonly _prefix = "app.generic";
    /**
     * Raised when apps are listed within VertiGIS Studio Go. Mobile only.
     *
     * @mobileOnly
     */
    get appsListed(): Event<GenericAppsListedArgs>;
    /**
     * Raised before a specific app starts within VertiGIS Studio Go. Mobile
     * only.
     *
     * @mobileOnly
     */
    get specificAppStarting(): Event<SpecificAppArgs>;
    /**
     * Raised when a specific app is started within VertiGIS Studio Go. Mobile
     * only.
     *
     * @mobileOnly
     */
    get specificAppStarted(): Event<SpecificAppArgs>;
    /**
     * Raised when a generic app is started. Mobile only.
     *
     * @mobileOnly
     */
    get started(): Event;
}
export declare class AppOperations extends OperationRegistry {
    protected readonly _prefix = "app";
    /**
     * Gets the current version stamped in the application (i.e. the version of
     * the viewer this application was created with). Web only.
     *
     * @webOnly
     */
    get getVersion(): Operation<void, string>;
    /**
     * Gets stored data, specified by the arguments (key and scope).
     */
    get getPersistentData(): Operation<StorageDataArgs, unknown>;
    /**
     * Removes stored data, specified by the arguments (key and scope). Returns
     * true if the data was removed, false otherwise. Mobile only.
     *
     * @mobileOnly
     */
    get removePersistentData(): Operation<StorageDataArgs, boolean>;
}
/**
 * Arguments for the reading app.*-persistent-data operations. Only available in
 * VertiGIS Studio Mobile.
 */
export interface StorageDataArgs {
    /**
     * The key of the data to store.
     */
    key: string;
    /**
     * The scope the data is stored in. Defaults to @see StorageScope.APP.
     */
    scope?: StorageScope;
}
/**
 * Arguments for the app.set-persistent-data operations. Only available in
 * VertiGIS Studio Mobile.
 */
export interface SaveStorageDataArgs extends StorageDataArgs {
    /**
     * The data to be stored.
     */
    data: unknown;
}
type StorageScope = 
/**
 * Defines the global storage that is accessible from all apps.
 */
"global"
/**
 * Defines the app specific storage that only is accessible from within the
 * very app.
 */
 | "app"
/**
 * Defines in memory storage, that doesn't get persisted on app shutdown.
 */
 | "memory";
export {};
