import { AdminNavigationBuiltInCategory, BladeSizes, IIcon } from "../";
import { GuidValue } from "@omnia/fx-models/internal-do-not-import-from-here/shared/models";
export interface NavigationNodeInitializeMessage {
    readonly key: string;
    state: NavigationNodeReactiveState;
}
export interface NavigationNodeReactiveState {
    hidden: boolean;
}
export interface NavigationNode {
    /**
     * The key of the navigation node
     */
    key?: string;
    /**
     * The title of the navigation node
     */
    title: string;
    /**
     * The element that will be rendered when selected
     */
    elementToRender: string;
    /**
    * The url segment will append after manifest id in url.
    */
    customUrlSegment?: string;
    /**
     * The icon
     */
    icon: IIcon;
    /**
     * This influence the order of the navigation nodes, be nice, use ordering with gap -100, 0, 100, 200
       So other extensions etc can inject between
     */
    weight: number;
    /**
     * The category that the navigation node belongs to
     * Any string or
     * @see AdminNavigationBuiltInCategory
     */
    category: string | AdminNavigationBuiltInCategory;
    /**
     * Tooltip to show when hover on element
     */
    tooltip?: string;
    /**
     * Show or Hide node in Omnia Admin by checking permission with input security role id on current context
     *
     * If SecurityRole is undefined, and the Category is Tenant scope, then it requires Tenant Admin permission in current context.
     * If SecurityRole is undefined, and the Category is Business Profile scope, then it requires Business Profile Admin permission in current context.
     * If SecurityRole is undefined, and the Category is App Instance scope, then it requires App Instance Amin permission in current context.
     * If SecurityRole is undefined, and the Category is not one of the Built-in scopes, then it requires Tenant Admin permission.
     *
     * If SecurityRole is any role, and the Category is Tenant scope, then it requires either Tenant Admin or the role permission in current context.
     * If SecurityRole is any role, and the Category is Business Profile scope, then it requires either Business Profile Admin or the role permission in current context.
     * If SecurityRole is any role, and the Category is App Instance scope, then it requires either App Instance Admin or the role permission in current context.
     * If SecurityRole is any role, and the Category is not one of the Built-in scopes, then it requires the role permission in current context.
     *
     * If securityRole is set to "AlwaysAuthorized", then it does not require any permission.
     */
    securityRole?: "AlwaysAuthorized" | GuidValue;
    /**
     * Custom initializer to work with node reactivity state
     * @see NavigationNodeReactiveState
     * */
    customInitializer?: boolean;
}
export interface BladeMenuNavigationNode {
    /**
    * The key of the navigation node
    */
    key?: string;
    /**
     * The title of the navigation node
     */
    title: string;
    /**
     * The element that will be rendered when selected
     */
    elementToRender: string;
    /**
     * The icon
     */
    icon: IIcon;
    /**
     * This influence the order of the navigation nodes, be nice, use ordering with gap -100, 0, 100, 200
       So other extensions etc can inject between
     */
    weight: number;
    /**
     * The size of the blade
     */
    bladeSize: BladeSizes;
}
