import { AppInstance, VersionedLayout, VersionedLayoutDefinition, AppTemplate, GuidValue, IIcon, RolePermissionSetting } from "@omnia/fx/models";
import { VersionedLayoutDefinitionEditorItem, VersionedLayoutEditorApi } from "@omnia/fx/ux";
import { ApiPath, IExtendApiManifestWithConfiguration } from "../Extends";
export interface ElementRenderer {
    id: GuidValue;
    icon: IIcon;
    title: string;
    renderManifestId: GuidValue;
    order?: number;
}
interface AppInstanceBladeRouteSettings {
    routePrefix: string;
}
interface InactiveTabSettings {
    active: boolean;
    syncLastActivityButtonManifestId?: GuidValue;
}
export type GetTemplateFunctionType = (appTemplate: AppTemplate) => {
    icon: IIcon;
    label: string;
};
export interface AppInstanceTabSettings {
    appEditingManifestId: GuidValue;
    advancedColumns?: {
        showLastActivity?: boolean;
    };
    activeOrphanedTab?: boolean;
    activeInactiveTab?: InactiveTabSettings;
    onPermissionsUpdated?: (rolePermissionSetting: RolePermissionSetting[], appInstance: AppInstance) => Promise<void>;
    customPermissionRenderManifestId?: GuidValue;
    attachSiteButtonManifestId?: GuidValue;
    routeSettings: AppInstanceBladeRouteSettings;
}
interface ValidationResult {
    isValid: boolean;
    message: string;
}
interface TemplatePoliciesConfiguration {
    enable: boolean;
    enableNamingPolicy?: boolean;
    renderManifestId?: GuidValue;
}
export interface AppTemplateTabSettings {
    appendMenuItems?: ElementRenderer[];
    policies?: TemplatePoliciesConfiguration;
    validator?: (template: AppTemplate) => Promise<ValidationResult>;
    beforeCreate?: <T extends AppTemplate = AppTemplate>(template: T) => void;
}
export interface AppLayoutTabSettings<T extends VersionedLayoutDefinition = VersionedLayoutDefinition> {
    layoutDefinition: new () => T;
    appInstanceId: GuidValue;
    onBeforeCreate?: (layout: VersionedLayoutDefinition) => VersionedLayoutDefinition | Promise<VersionedLayoutDefinition>;
    enableAlias?: boolean;
    setAppLayoutDefinitionEditorItem?: (api: VersionedLayoutEditorApi, layout: VersionedLayout) => Promise<VersionedLayoutDefinitionEditorItem>;
    enableBlockLockSettings?: boolean;
}
export interface AppNamingPolicyTabSettings {
}
export interface IAppManagementInstanceConfigurationApi {
    addAppInstanceTab: (settings: AppInstanceTabSettings) => IAppManagementInstanceConfigurationApi;
    addAppTemplateTab: (settings: AppTemplateTabSettings) => IAppManagementInstanceConfigurationApi;
    addAppLayoutTab: (settings: AppLayoutTabSettings) => IAppManagementInstanceConfigurationApi;
    addNamingPolicyTab: (settings: AppNamingPolicyTabSettings) => IAppManagementInstanceConfigurationApi;
    addCustomTab: (items: ElementRenderer | ElementRenderer[]) => IAppManagementInstanceConfigurationApi;
}
export interface IAppManagementInstanceHandler {
    onConfigure: (api: IAppManagementInstanceConfigurationApi) => Promise<void>;
}
export interface IAppManagementUsageApi {
    openStandalone: (appDefinition: GuidValue, closable: boolean) => void;
}
export interface IAppManagementRegistrationApi {
    registerHandler: (appDefinitionId: GuidValue, handler: new () => IAppManagementInstanceHandler) => void;
}
declare module "./UxApi" {
    interface IOmniaUxApi {
        appManagement: {
            use: Promise<IAppManagementUsageApi>;
            registration: Promise<IAppManagementRegistrationApi>;
        };
    }
    interface IOmniaUxExtendApiManifest {
        appManagement: {
            use: ApiPath;
            registration: IExtendApiManifestWithConfiguration<GuidValue>;
        };
    }
}
export {};
