/**
 * Copyright (c) OpenLens Maintainers. All rights reserved.
 * Licensed under MIT License. See LICENSE in root directory for more information.
 */
import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
import type { ObservableMap } from "mobx";
import type { RenderResult } from "@testing-library/react";
import type { KubeApiResourceDescriptor } from "../../../common/rbac";
import type { DiContainer, Injectable } from "@ogre-tools/injectable";
import type { NavigateToHelmCharts } from "../../../common/front-end-routing/routes/cluster/helm/charts/navigate-to-helm-charts.injectable";
import type { MinimalTrayMenuItem } from "../../../main/tray/electron-tray/electron-tray.injectable";
import type { Route } from "../../../common/front-end-routing/front-end-route-injection-token";
import type { NavigateToRouteOptions } from "../../../common/front-end-routing/navigate-to-route-injection-token";
import type { LensMainExtension } from "../../../extensions/lens-main-extension";
import type { LensWindow } from "../../../main/start-main-application/lens-window/application-window/create-lens-window.injectable";
import type { FakeExtensionOptions } from "./get-extension-fake";
type MainDiCallback = (container: {
    mainDi: DiContainer;
}) => void | Promise<void>;
type WindowDiCallback = (container: {
    windowDi: DiContainer;
}) => void | Promise<void>;
type LensWindowWithHelpers = LensWindow & {
    rendered: RenderResult;
    di: DiContainer;
};
export interface ApplicationBuilder {
    mainDi: DiContainer;
    setEnvironmentToClusterFrame: () => ApplicationBuilder;
    extensions: {
        enable: (...extensions: FakeExtensionOptions[]) => void;
        disable: (...extensions: FakeExtensionOptions[]) => void;
        get: (id: string) => {
            main: LensMainExtension;
            applicationWindows: Record<string, LensRendererExtension> & {
                only: LensRendererExtension;
            };
        };
    };
    applicationWindow: {
        closeAll: () => void;
        only: LensWindowWithHelpers;
        get: (id: string) => LensWindowWithHelpers;
        getAll: () => LensWindowWithHelpers[];
        create: (id: string) => LensWindowWithHelpers;
    };
    allowKubeResource: (resource: KubeApiResourceDescriptor) => ApplicationBuilder;
    beforeApplicationStart: (callback: MainDiCallback) => ApplicationBuilder;
    afterApplicationStart: (callback: MainDiCallback) => ApplicationBuilder;
    beforeWindowStart: (callback: WindowDiCallback) => ApplicationBuilder;
    afterWindowStart: (callback: WindowDiCallback) => ApplicationBuilder;
    startHidden: () => Promise<void>;
    render: () => Promise<RenderResult>;
    tray: {
        click: (id: string) => Promise<void>;
        get: (id: string) => MinimalTrayMenuItem | null;
        getIconPath: () => string;
    };
    applicationMenu: {
        click: (...path: string[]) => void;
        items: string[][];
    };
    preferences: {
        close: () => void;
        navigate: () => void;
        navigateTo: (route: Route<any>, params: Partial<NavigateToRouteOptions<any>>) => void;
        navigation: {
            click: (id: string) => void;
        };
    };
    namespaces: {
        add: (namespace: string) => void;
        addSubNamespace: (namespace: string, parent: string) => void;
        select: (namespace: string) => void;
    };
    helmCharts: {
        navigate: NavigateToHelmCharts;
    };
    navigateWith: (token: Injectable<() => void, any, void>) => void;
    select: {
        openMenu: (id: string) => {
            selectOption: (labelText: string) => void;
        };
        selectOption: (menuId: string, labelText: string) => void;
        getValue: (menuId: string) => string;
    };
}
export declare const getApplicationBuilder: () => ApplicationBuilder;
export declare const rendererExtensionsStateInjectable: Injectable<ObservableMap<string, LensRendererExtension>, unknown, void>;
export {};
