import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './instances';
export interface KubernetesCluster {
    id: number;
    label: string;
    k8s_version: string;
    region: string;
    status: 'ready' | 'not_ready' | 'provisioning' | 'deleted' | 'updating' | 'upgrading';
    created: string;
    updated: string;
    tags: string[];
    control_plane: {
        high_availability: boolean;
    };
}
export interface KubernetesNodePool {
    id: number;
    count: number;
    type: string;
    tags: string[];
    autoscaler?: {
        enabled: boolean;
        min?: number;
        max?: number;
    };
    nodes: KubernetesNode[];
}
export interface KubernetesNode {
    id: string;
    instance_id: number;
    status: 'ready' | 'not_ready' | 'provisioning';
}
export interface KubernetesVersion {
    id: string;
}
export interface KubeConfig {
    kubeconfig: string;
}
export interface APIEndpoint {
    endpoint: string;
}
export interface KubernetesDashboard {
    url: string;
}
export interface KubernetesType {
    id: string;
    label: string;
    price: {
        monthly: number;
        hourly: number;
    };
    region_prices?: Record<string, {
        monthly: number;
        hourly: number;
    }>;
}
export interface CreateKubernetesClusterRequest {
    label: string;
    region: string;
    k8s_version: string;
    tags?: string[];
    node_pools: {
        type: string;
        count: number;
        tags?: string[];
        autoscaler?: {
            enabled: boolean;
            min?: number;
            max?: number;
        };
    }[];
    control_plane?: {
        high_availability?: boolean;
    };
}
export interface UpdateKubernetesClusterRequest {
    label?: string;
    k8s_version?: string;
    tags?: string[];
    control_plane?: {
        high_availability?: boolean;
    };
}
export interface CreateNodePoolRequest {
    type: string;
    count: number;
    tags?: string[];
    autoscaler?: {
        enabled: boolean;
        min?: number;
        max?: number;
    };
}
export interface UpdateNodePoolRequest {
    count?: number;
    tags?: string[];
    autoscaler?: {
        enabled: boolean;
        min?: number;
        max?: number;
    };
}
export interface RecycleNodePoolRequest {
    nodes: string[];
}
export interface KubernetesClient {
    getClusters: (params?: PaginationParams) => Promise<PaginatedResponse<KubernetesCluster>>;
    getCluster: (id: number) => Promise<KubernetesCluster>;
    createCluster: (data: CreateKubernetesClusterRequest) => Promise<KubernetesCluster>;
    updateCluster: (id: number, data: UpdateKubernetesClusterRequest) => Promise<KubernetesCluster>;
    deleteCluster: (id: number) => Promise<void>;
    recycleCluster: (id: number) => Promise<void>;
    upgradeCluster: (id: number) => Promise<void>;
    getNodePools: (clusterId: number) => Promise<KubernetesNodePool[]>;
    getNodePool: (clusterId: number, poolId: number) => Promise<KubernetesNodePool>;
    createNodePool: (clusterId: number, data: CreateNodePoolRequest) => Promise<KubernetesNodePool>;
    updateNodePool: (clusterId: number, poolId: number, data: UpdateNodePoolRequest) => Promise<KubernetesNodePool>;
    deleteNodePool: (clusterId: number, poolId: number) => Promise<void>;
    recycleNodes: (clusterId: number, poolId: number, data: RecycleNodePoolRequest) => Promise<void>;
    deleteNode: (clusterId: number, nodeId: string) => Promise<void>;
    recycleNode: (clusterId: number, nodeId: string) => Promise<void>;
    getKubeconfig: (id: number) => Promise<KubeConfig>;
    getAPIEndpoints: (id: number) => Promise<APIEndpoint[]>;
    getDashboardURL: (id: number) => Promise<KubernetesDashboard>;
    deleteServiceToken: (id: number) => Promise<void>;
    getVersions: () => Promise<KubernetesVersion[]>;
    getVersion: (version: string) => Promise<KubernetesVersion>;
    getTypes: () => Promise<KubernetesType[]>;
}
/**
 * Creates a Kubernetes (LKE) client for interfacing with the Linode Kubernetes Engine API
 */
export declare function createKubernetesClient(axios: AxiosInstance): KubernetesClient;
