import * as constants from '../core/constants.js';
import { type AccountManager } from '../core/account-manager.js';
import { type ProfileManager } from '../core/profile-manager.js';
import { BaseCommand } from './base.js';
import { type ArgvStruct } from '../types/aliases.js';
import { type ClusterReferenceName, type ComponentId, type Optional, type SoloListrTask } from '../types/index.js';
import { type NamespaceName } from '../types/namespace/namespace-name.js';
import { type CommandFlags } from '../types/flag-types.js';
import { MirrorNodeStateSchema } from '../data/schema/model/remote/state/mirror-node-state-schema.js';
interface MirrorNodeDeployConfigClass {
    isChartInstalled: boolean;
    cacheDir: string;
    chartDirectory: string;
    mirrorNodeChartDirectory: string;
    clusterContext: string;
    clusterReference: ClusterReferenceName;
    namespace: NamespaceName;
    enableIngress: boolean;
    ingressControllerValueFile: string;
    mirrorStaticIp: string;
    profileFile: string;
    profileName: string;
    valuesFile: string;
    valuesArg: string;
    quiet: boolean;
    mirrorNodeVersion: string;
    pinger: boolean;
    operatorId: string;
    operatorKey: string;
    useExternalDatabase: boolean;
    storageType: constants.StorageType;
    storageReadAccessKey: string;
    storageReadSecrets: string;
    storageEndpoint: string;
    storageBucket: string;
    storageBucketPrefix: string;
    storageBucketRegion: string;
    externalDatabaseHost: Optional<string>;
    externalDatabaseOwnerUsername: Optional<string>;
    externalDatabaseOwnerPassword: Optional<string>;
    externalDatabaseReadonlyUsername: Optional<string>;
    externalDatabaseReadonlyPassword: Optional<string>;
    domainName: Optional<string>;
    forcePortForward: Optional<boolean>;
    releaseName: string;
    ingressReleaseName: string;
    newMirrorNodeComponent: MirrorNodeStateSchema;
    isLegacyChartInstalled: boolean;
    id: number;
}
interface MirrorNodeDeployContext {
    config: MirrorNodeDeployConfigClass;
    addressBook: string;
}
interface MirrorNodeDestroyConfigClass {
    namespace: NamespaceName;
    clusterContext: string;
    isChartInstalled: boolean;
    clusterReference: ClusterReferenceName;
    id: ComponentId;
    releaseName: string;
    ingressReleaseName: string;
    isLegacyChartInstalled: boolean;
    isIngressControllerChartInstalled: boolean;
}
interface MirrorNodeDestroyContext {
    config: MirrorNodeDestroyConfigClass;
}
export declare class MirrorNodeCommand extends BaseCommand {
    private readonly accountManager?;
    private readonly profileManager?;
    constructor(accountManager?: AccountManager, profileManager?: ProfileManager);
    private static readonly DEPLOY_CONFIGS_NAME;
    private static readonly UPGRADE_CONFIGS_NAME;
    static readonly DEPLOY_FLAGS_LIST: CommandFlags;
    static readonly UPGRADE_FLAGS_LIST: CommandFlags;
    static readonly DESTROY_FLAGS_LIST: CommandFlags;
    private prepareBlockNodeIntegrationValues;
    private prepareValuesArg;
    private deployMirrorNode;
    private getReleaseName;
    private getIngressReleaseName;
    private renderReleaseName;
    private renderIngressReleaseName;
    private enableMirrorNodeTask;
    private checkPodsAreReadyNodeTask;
    private seedDbDataTask;
    private enablePortForwardingTask;
    add(argv: ArgvStruct): Promise<boolean>;
    upgrade(argv: ArgvStruct): Promise<boolean>;
    private getEnvironmentVariablePrefix;
    private getChartNamespace;
    destroy(argv: ArgvStruct): Promise<boolean>;
    /** Removes the mirror node components from remote config. */
    disableMirrorNodeComponents(): SoloListrTask<MirrorNodeDestroyContext>;
    /** Adds the mirror node components to remote config. */
    addMirrorNodeComponents(): SoloListrTask<MirrorNodeDeployContext>;
    close(): Promise<void>;
    private checkIfLegacyChartIsInstalled;
    private inferMirrorNodeId;
    private inferDestroyData;
}
export {};
