import mongoose, { Types } from "mongoose";
import type { HiddenBodyKeys } from "../interfaces";
import type { CloudProviderType } from "../interfaces/SystemTypes";
import type { IBase } from "./Base";
import type { ICloudProvider } from "./CloudProvider";
export interface ICluster extends IBase {
    /**
     * Cluster name
     */
    name?: string;
    /**
     * Cluster slug
     */
    slug?: string;
    /**
     * Is cluster verified
     */
    isVerified?: boolean;
    /**
     * Is this a default cluster
     */
    isDefault?: boolean;
    /**
     * A cluster name on the cloud provider
     * - **Applied for GKE & DOK only**
     */
    shortName?: string;
    /**
     * Cluster context name (to access via `kubectl context`)
     */
    contextName?: string;
    /**
     * Cloud provider of this cluster
     */
    provider?: string | Types.ObjectId | ICloudProvider;
    /**
     * Short name of the cloud provider
     * @example "gcloud", "digitalocean", "custom"
     */
    providerShortName?: CloudProviderType;
    /**
     * Cloud zone of this cluster
     */
    zone?: string;
    /**
     * Cloud region of this cluster
     */
    region?: string;
    /**
     * [GOOGLE ONLY] Project ID of this cluster
     *
     * @remarks This is not a project ID of BUILD SERVER database
     */
    projectID?: string;
    /**
     * #### `REQUIRES`
     * ---
     * The PRIMARY domain of this cluster
     */
    primaryDomain?: string;
    /**
     * The PRIMARY IP ADDRESS of this cluster
     */
    primaryIP?: string;
    /**
     * Alternative domains or project's domains of this cluster
     */
    domains?: string[];
    /**
     * The KUBECONFIG data to access to this cluster
     */
    kubeConfig?: string;
    /**
     * Content of the Service Account credentials to access this cluster
     */
    serviceAccount?: string;
    /**
     * Content of the API ACCESS TOKEN to access this cluster
     */
    apiAccessToken?: string;
}
export type ClusterDto = Omit<ICluster, keyof HiddenBodyKeys>;
export declare const clusterSchema: mongoose.Schema<ICluster, mongoose.Model<ICluster, any, any, any, mongoose.Document<unknown, any, ICluster> & ICluster & Required<{
    _id: string | Types.ObjectId;
}>, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, ICluster, mongoose.Document<unknown, {}, mongoose.FlatRecord<ICluster>> & mongoose.FlatRecord<ICluster> & Required<{
    _id: string | Types.ObjectId;
}>>;
export declare const ClusterModel: mongoose.Model<ICluster, {}, {}, {}, mongoose.Document<unknown, {}, ICluster> & ICluster & Required<{
    _id: string | Types.ObjectId;
}>, mongoose.Schema<ICluster, mongoose.Model<ICluster, any, any, any, mongoose.Document<unknown, any, ICluster> & ICluster & Required<{
    _id: string | Types.ObjectId;
}>, any>, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, ICluster, mongoose.Document<unknown, {}, mongoose.FlatRecord<ICluster>> & mongoose.FlatRecord<ICluster> & Required<{
    _id: string | Types.ObjectId;
}>>>;
//# sourceMappingURL=Cluster.d.ts.map