import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './instances';
export interface DatabaseEngine {
    id: string;
    engine: string;
    version: string;
}
export interface DatabaseType {
    id: string;
    label: string;
    engines: DatabaseEngine[];
    class: string;
    memory_mb: number;
    disk_mb: number;
    vcpus: number;
    price: {
        hourly: number;
        monthly: number;
    };
    regions: string[];
}
export interface DatabaseInstance {
    id: number;
    status: 'provisioning' | 'active' | 'suspending' | 'suspended' | 'resuming' | 'restoring' | 'failed' | 'degraded';
    label: string;
    region: string;
    type: string;
    engine: string;
    version: string;
    cluster_size: number;
    replica_set?: boolean;
    encrypted: boolean;
    ssl_connection: boolean;
    allow_list: string[];
    port: number;
    hosts: {
        primary?: string;
        secondary?: string;
        primary_read_only?: string;
    };
    created: string;
    updated: string;
}
export interface MySQLDatabaseInstance extends DatabaseInstance {
    updates?: {
        day_of_week: number;
        duration: number;
        frequency: string;
        hour_of_day: number;
        week_of_month?: number;
    };
}
export interface PostgreSQLDatabaseInstance extends DatabaseInstance {
    updates?: {
        day_of_week: number;
        duration: number;
        frequency: string;
        hour_of_day: number;
        week_of_month?: number;
    };
}
export interface DatabaseCredentials {
    username: string;
    password: string;
}
export interface SSLCertificate {
    ca_certificate: string;
}
export interface CreateMySQLDatabaseRequest {
    label: string;
    region: string;
    type: string;
    engine: string;
    allow_list?: string[];
    cluster_size?: number;
    encrypted?: boolean;
    ssl_connection?: boolean;
    tags?: string[];
    updates?: {
        day_of_week: number;
        duration: number;
        frequency: 'weekly' | 'monthly';
        hour_of_day: number;
        week_of_month?: number;
    };
}
export interface UpdateMySQLDatabaseRequest {
    label?: string;
    allow_list?: string[];
    updates?: {
        day_of_week?: number;
        duration?: number;
        frequency?: 'weekly' | 'monthly';
        hour_of_day?: number;
        week_of_month?: number;
    };
    tags?: string[];
}
export interface CreatePostgreSQLDatabaseRequest {
    label: string;
    region: string;
    type: string;
    engine: string;
    allow_list?: string[];
    cluster_size?: number;
    encrypted?: boolean;
    ssl_connection?: boolean;
    tags?: string[];
    updates?: {
        day_of_week: number;
        duration: number;
        frequency: 'weekly' | 'monthly';
        hour_of_day: number;
        week_of_month?: number;
    };
}
export interface UpdatePostgreSQLDatabaseRequest {
    label?: string;
    allow_list?: string[];
    updates?: {
        day_of_week?: number;
        duration?: number;
        frequency?: 'weekly' | 'monthly';
        hour_of_day?: number;
        week_of_month?: number;
    };
    tags?: string[];
}
export interface DatabasesClient {
    getEngines: (params?: PaginationParams) => Promise<PaginatedResponse<DatabaseEngine>>;
    getEngine: (engineId: string) => Promise<DatabaseEngine>;
    getTypes: (params?: PaginationParams) => Promise<PaginatedResponse<DatabaseType>>;
    getType: (typeId: string) => Promise<DatabaseType>;
    getDatabaseInstances: (params?: PaginationParams) => Promise<PaginatedResponse<DatabaseInstance>>;
    getMySQLInstances: (params?: PaginationParams) => Promise<PaginatedResponse<MySQLDatabaseInstance>>;
    getMySQLInstance: (instanceId: number) => Promise<MySQLDatabaseInstance>;
    createMySQLInstance: (data: CreateMySQLDatabaseRequest) => Promise<MySQLDatabaseInstance>;
    updateMySQLInstance: (instanceId: number, data: UpdateMySQLDatabaseRequest) => Promise<MySQLDatabaseInstance>;
    deleteMySQLInstance: (instanceId: number) => Promise<void>;
    getMySQLCredentials: (instanceId: number) => Promise<DatabaseCredentials>;
    resetMySQLCredentials: (instanceId: number) => Promise<DatabaseCredentials>;
    getMySQLSSLCertificate: (instanceId: number) => Promise<SSLCertificate>;
    patchMySQLInstance: (instanceId: number) => Promise<void>;
    suspendMySQLInstance: (instanceId: number) => Promise<void>;
    resumeMySQLInstance: (instanceId: number) => Promise<void>;
    getPostgreSQLInstances: (params?: PaginationParams) => Promise<PaginatedResponse<PostgreSQLDatabaseInstance>>;
    getPostgreSQLInstance: (instanceId: number) => Promise<PostgreSQLDatabaseInstance>;
    createPostgreSQLInstance: (data: CreatePostgreSQLDatabaseRequest) => Promise<PostgreSQLDatabaseInstance>;
    updatePostgreSQLInstance: (instanceId: number, data: UpdatePostgreSQLDatabaseRequest) => Promise<PostgreSQLDatabaseInstance>;
    deletePostgreSQLInstance: (instanceId: number) => Promise<void>;
    getPostgreSQLCredentials: (instanceId: number) => Promise<DatabaseCredentials>;
    resetPostgreSQLCredentials: (instanceId: number) => Promise<DatabaseCredentials>;
    getPostgreSQLSSLCertificate: (instanceId: number) => Promise<SSLCertificate>;
    patchPostgreSQLInstance: (instanceId: number) => Promise<void>;
    suspendPostgreSQLInstance: (instanceId: number) => Promise<void>;
    resumePostgreSQLInstance: (instanceId: number) => Promise<void>;
}
/**
 * Creates a databases client for interfacing with the Linode Managed Databases API
 */
export declare function createDatabasesClient(axios: AxiosInstance): DatabasesClient;
