/**
 * This is the currently supported - albeit very minimal - public SDK.
 */
import { InjectionToken } from '@angular/core';
import { Observable } from 'rxjs';
/**
 * Wire in as a string.  Gives the root URL for API access (for example, the load balancer URL
 * or the single-cell URL).
 */
export declare const API_ROOT_URL: InjectionToken<string>;
/**
 * Wire in as a string.  Gives the root URL for the legacy Flex application.
 */
export declare const FLEX_APP_URL: InjectionToken<string>;
/**
 * Wire in as a string.  Gives the current scope of the VCD-UI.  As of current, this will be
 * either 'tenant' for the tenant portal, or 'service-provider' for the service-provider portal.
 */
export declare const SESSION_SCOPE: InjectionToken<string>;
/**
 * Wire in as a string.  Gives the unique name (not the display name) of the current tenant
 * organization that the VCD-UI is being used for.
 */
export declare const SESSION_ORGANIZATION: InjectionToken<string>;
/**
 * Wire in as a string.  Gives the UUID identifier of the current tenant
 * organization that the VCD-UI is being used for.
 */
export declare const SESSION_ORG_ID: InjectionToken<string>;
/**
 * Wire in as a string.  Gives the full root path for module assets (e.g. images, scripts, text files)
 *
 * ATTENTION!
 * Add || new InjectionToken to workaround the Angular security mechanics which prevent use of injection tokens
 * which potentially are not defiend. The same fix can be applied for the rest tokens if needed.
 */
export declare const EXTENSION_ASSET_URL: InjectionToken<string>;
/**
 * Wire in as a string.  Gives the Angular 2 route that the module is registered under.
 */
export declare const EXTENSION_ROUTE: InjectionToken<string>;
/**
 * Wire in as a boolean.  True if running under the SDK, false if running in production.
 */
export declare const SDK_MODE: InjectionToken<boolean>;
/**
 * Payload for registering a navigation menu entry.
 */
export interface ExtensionNavRegistration {
    /**
     * The router path to navigate to when selected.
     */
    path: string;
    /**
     * i18 key for name of extension, to be used as text for links
     */
    nameCode: string;
    /**
     * i18n key for description of extension, to be used on hover for links
     */
    descriptionCode: string;
}
/**
 * Dispatch this to the redux store to register a navigation menu.
 */
export interface ExtensionNavRegistrationAction {
    payload: ExtensionNavRegistration;
    readonly type: string;
}
export type ExtensionNavRegistrationActionCtor = new (payload: ExtensionNavRegistration) => ExtensionNavRegistrationAction;
export declare const ExtensionNavRegistrationAction: ExtensionNavRegistrationActionCtor;
/**
 * Inject this to access the authentication token.
 */
export interface AuthTokenHolderService {
    /**
     * The authentication token.
     */
    token: string;
}
export declare const AuthTokenHolderService: {
    token: string;
};
/**
 * This represents a menu item that can be clicked to perform an action on an entity (e.g. VM).
 */
export interface EntityActionExtensionMenuItem {
    /**
     * This is a unique URN identifying the action. This is so the component can be notified which action was requested.
     */
    urn: string;
    /**
     * This is the label for the menu item. It is not automatically translated.
     */
    text: string;
    /**
     * This is the enabled state for the menu item.
     */
    enabled: boolean;
    /**
     * This is the busy state for the menu item.
     */
    busy: boolean;
}
/**
 * This represents a sub-menu that contains other sub-menus or menu actions.
 */
export interface EntityActionExtensionSubmenu {
    /**
     * This is the label for the sub-menu. It is not automatically translated.
     */
    text: string;
    /**
     * This is an arbitrary, ordered list of EntityActionMenuItem.
     */
    children: EntityActionExtensionMenuItem[];
}
/**
 * This represents menu information for an entity action.
 */
export type EntityActionExtensionMenuEntry = EntityActionExtensionMenuItem | EntityActionExtensionSubmenu;
/**
 * Every component referenced by an entity action extension point must inherit from this.
 */
export declare abstract class _EntityActionExtensionComponent {
    /**
     * This returns is an Observable that defines the menu entry for this component. This is actively bound -
     * the component is able to change it in order to have the menu change (for example, to change busy
     * or enabled states).
     */
    abstract getMenuEntry(entityUrn: string): Observable<EntityActionExtensionMenuEntry>;
    /**
     * This field is a method that is called if a menu item is clicked while enabled. It will be called with the menu
     * item's URN and the URN of the entity that the action is being called for (e.g. the URN of the VM being edited).
     * It must return a single-shot (e.g. of, fromPromise or .first) Observable on completion. This Observable returns
     * a single value, refreshRequested. If this is true, the entity being edited will be immediately refreshed.
     * @param menuItemUrn the URN of the clicked menu item
     * @param entityUrnThe URN of the entity that the action is being called for
     */
    abstract performAction(menuItemUrn: string, entityUrn: string): Observable<{
        refreshRequested: boolean;
    }>;
}
export declare const EntityActionExtensionComponent: typeof _EntityActionExtensionComponent;
export declare abstract class _WizardExtensionComponent<P, R, E> {
    /**
     * Define method which will be executed by the Extension Point Orchestrator,
     * when certain event is triggered.
     * @param payload - the payload of the request triggered by the Core UI.
     * @param response - the response from the request triggered by the Core UI.
     * @param error - the Core UI will reprot any error that may appear during execution.
     */
    abstract performAction(payload: P, response: R, error: E): void;
}
export declare const WizardExtensionComponent: typeof _WizardExtensionComponent;
export interface WizardExtensionState {
    isValid: boolean;
}
export declare abstract class _WizardExtensionWithValidationComponent<P, R, E> extends _WizardExtensionComponent<P, R, E> {
    /**
     * Get extension point state.
     */
    abstract getState(): Observable<WizardExtensionState>;
}
export declare const WizardExtensionWithValidationComponent: typeof _WizardExtensionWithValidationComponent;
/**
 * Every component-based Extension Point that is renderd in Cloud Director UI Entity Details
 * must extend that class to obtain context about the Entity.
 *
 * See comments of the methods of the abstract class for more information.
 */
export declare abstract class _WizardExtensionWithContextComponent<P, R, E> extends _WizardExtensionComponent<P, R, E> {
    /**
    * Define method which will be executed on init and information
    * about context object will be passed to the Extension Point.
    *
    * @param context reference to the context object.
    */
    abstract onContext(context: string): void;
}
export declare const WizardExtensionWithContextComponent: typeof _WizardExtensionWithContextComponent;
