/// <reference types="mongoose/types/aggregate" />
/// <reference types="mongoose/types/callback" />
/// <reference types="mongoose/types/collection" />
/// <reference types="mongoose/types/connection" />
/// <reference types="mongoose/types/cursor" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/expressions" />
/// <reference types="mongoose/types/helpers" />
/// <reference types="mongoose/types/middlewares" />
/// <reference types="mongoose/types/indexes" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/mongooseoptions" />
/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/populate" />
/// <reference types="mongoose/types/query" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/schematypes" />
/// <reference types="mongoose/types/session" />
/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/utility" />
/// <reference types="mongoose/types/validation" />
/// <reference types="mongoose/types/virtuals" />
/// <reference types="mongoose" />
/// <reference types="mongoose/types/inferschematype" />
import type { IBuild, ICluster, IUser, IWorkspace } from "../entities";
import type { IApp } from "../entities/App";
import type { DeployEnvironment, IQueryFilter, IQueryOptions, IQueryPagination, KubeDeployment } from "../interfaces";
import type { DeployEnvironmentData } from "../interfaces/AppInterfaces";
import type { DeployEnvironmentVolume } from "../interfaces/DeployEnvironmentVolume";
import type { KubeEnvironmentVariable } from "../interfaces/EnvironmentVariable";
import type { Ownership } from "../interfaces/SystemTypes";
export type DeployEnvironmentApp = DeployEnvironment & {
    app: IApp;
    appSlug: string;
    cluster: ICluster;
};
export type KubeDeploymentOnCluster = KubeDeployment & {
    cluster: ICluster;
};
export declare class DeployEnvironmentService {
    /**
     * Current login user
     */
    user?: IUser;
    /**
     * Current active workspace
     */
    workspace?: IWorkspace;
    /**
     * Current owner & workspace
     */
    ownership?: Ownership;
    constructor(ownership?: Ownership);
    createDeployEnvironment(appSlug: string, params: {
        /**
         * `REQUIRES`
         * ---
         * Deploy environment name
         * @default dev
         */
        env: string;
        /**
         * `REQUIRES`
         * ---
         * Deploy environment configuration
         */
        deployEnvironmentData: DeployEnvironmentData;
    }, ownership: Ownership): Promise<IApp>;
    getDeployEnvironmentStatus(deployEnvironment: DeployEnvironment): Promise<DeployEnvironment>;
    getAllDeployEnvironments(workspaceId: string, options?: IQueryOptions): Promise<any>;
    listDeployEnvironments(filter?: IQueryFilter<DeployEnvironment>, options?: IQueryOptions & IQueryPagination): Promise<{
        data: any;
        pagination: {
            skip: number;
            limit: number;
            total: any;
            page: number;
            size: number;
        };
    }>;
    viewDeployEnvironmentLogs(app: IApp, env: string): Promise<{
        [pod: string]: string;
    }>;
    /**
     * Make deploy environment sleep by scale the replicas to ZERO, so you can wake it up later without re-deploy.
     */
    sleepDeployEnvironment(app: IApp, env: string): Promise<{
        success: boolean;
        message: string;
    }>;
    /**
     * Wake a sleeping deploy environment up by scale it to 1 (Will FAIL if this environment hasn't been deployed).
     */
    wakeUpDeployEnvironment(app: IApp, env: string): Promise<{
        success: boolean;
        message: string;
    }>;
    /**
     * Take down a deploy environment but still keep the deploy environment information (cluster, registry, namespace,...)
     */
    takeDownDeployEnvironment(app: IApp, env: string, options?: IQueryOptions): Promise<{
        app: {
            slug: string;
            id: string | import("mongoose").Types.ObjectId;
            owner: string | IUser | import("mongoose").Types.ObjectId;
            workspace: string | IWorkspace | import("mongoose").Types.ObjectId;
            tookDownAt?: undefined;
            cluster?: undefined;
        };
        success: boolean;
        message: any;
    } | {
        app: {
            slug: string;
            id: string | import("mongoose").Types.ObjectId;
            owner: string | IUser | import("mongoose").Types.ObjectId;
            workspace: string | IWorkspace | import("mongoose").Types.ObjectId;
            tookDownAt: Date;
            cluster: string;
        };
        success: boolean;
        message: any;
    }>;
    deleteDeployEnvironment(app: IApp, env: string): Promise<IApp>;
    /**
     * Change cluster of a deploy environment
     * @param app
     * @param env
     * @param cluster
     * @param options
     * @returns
     */
    changeCluster(app: IApp, env: string, cluster: ICluster, options: {
        user: IUser;
        workspace: IWorkspace;
        deleteAppOnPreviousCluster?: boolean;
        isDebugging?: boolean;
    }): Promise<{
        build: IBuild;
        release: import("../entities").IRelease;
        app: IApp;
    }>;
    /**
     * Get environment variables of a deploy environment
     * @param app - IApp
     * @param env - Deploy environment (dev, prod,...)
     * @returns
     */
    getEnvVars(app: IApp, env: string): Promise<{
        name: string;
        value: string;
    }[]>;
    /**
     * Update environment variables of a deploy environment
     * @param app - IApp
     * @param env - Deploy environment (dev, prod,...)
     * @param variables - Array of environment variables: `[{name,value}]`
     * @returns
     */
    updateEnvVars(app: IApp, env: string, variables: KubeEnvironmentVariable[]): Promise<{
        app: IApp;
        message: string;
    }>;
    /**
     * Add persistent volume to deploy environment
     * @param app - IApp
     * @param env - Deploy environment (dev, prod,...)
     * @param data - Persistent volume configuration
     */
    addPersistentVolume(app: IApp, env: string, data: DeployEnvironmentVolume): Promise<DeployEnvironmentVolume>;
    /**
     * Add persistent volume to deploy environment
     * @param app - IApp
     * @param env - Deploy environment (dev, prod,...)
     * @param data - Persistent volume configuration
     */
    addPersistentVolumeBySize(app: IApp, env: string, data: Pick<DeployEnvironmentVolume, "name" | "size" | "mountPath">): Promise<DeployEnvironmentVolume>;
    /**
     * Delete persistent volume to deploy environment
     * @param app - IApp
     * @param env - Deploy environment name (dev, prod,...)
     * @param name - Persistent volume name
     */
    removePersistentVolume(app: IApp, env: string, name: string): Promise<{
        success: boolean;
        message: string;
    }>;
}
//# sourceMappingURL=DeployEnvironmentService.d.ts.map