import { ICloudProvider, CreateServerConfig, ServerCreationResult, ServerDeletionResult, SSHKeyCreationResult, SSHKeyDetails, SshKeyInfo, ChangeServerTypeConfig, ProviderVolumeSummary } from '../../interfaces/cloud-provider.interface';
import { SSHKeyDto } from '../../../access/dto/ssh-key.dto';
import { ScalewayIamAdapter } from './scaleway-iam.adapter';
import { ICredentialProvider } from '../../interfaces/credential-provider.interface';
import { CreateVNetConfig, VNetCreationResult, VNetDeletionResult, VNetDetails, AddSubnetConfig, DeleteSubnetConfig, AddRouteConfig, DeleteRouteConfig, AttachServerToVNetConfig, ServerVNetAttachmentResult, DetachServerFromVNetConfig } from '../../interfaces/network-provider.interface';
import { ScalewayVpcAdapter } from './scaleway-vpc.adapter';
import { InstanceEntity } from '../../../instances/entities/instance.entity';
import { ServerResponseDto } from '../../../../modules/infrastructure/servers/dto/server-response.dto';
import { DeleteServerDto } from '../../../../modules/infrastructure/servers/dto/delete-server.dto';
import { NodeSizeDto } from '../../dto/node-size.dto';
import { LabelService } from '../../../common/services/label.service';
import { ScalewayInstancesAdapter } from './scaleway-instances.adapter';
import { ScalewayBareMetalAdapter } from './scaleway-baremetal.adapter';
export declare class ScalewayProviderService implements ICloudProvider {
    private readonly credentialProvider;
    private readonly labelService;
    private readonly instancesAdapter;
    private readonly baremetalAdapter;
    private readonly vpcAdapter;
    private readonly iamAdapter;
    private readonly logger;
    constructor(credentialProvider: ICredentialProvider, labelService: LabelService, instancesAdapter: ScalewayInstancesAdapter, baremetalAdapter: ScalewayBareMetalAdapter, vpcAdapter: ScalewayVpcAdapter, iamAdapter: ScalewayIamAdapter);
    /**
     * Provision Block Storage (SBS) Volumes and attach them to a freshly created
     * instance. Uses raw axios calls because the Scaleway Block Storage API is
     * not in the generated client. Each volume is created, awaited, then
     * attached via the Instance API.
     *
     * Returns the device paths the bootstrap script will format/mount.
     * Convention for Scaleway SBS attached volumes: /dev/disk/by-id/scsi-0SCW_b_<volume-id>.
     */
    private provisionSharedVolumes;
    private deleteSharedVolume;
    private buildInstanceResourceId;
    private buildBaremetalResourceId;
    private parseResourceId;
    private labelsToTags;
    private tagsToLabels;
    private mapInstanceStatus;
    private mapBaremetalStatus;
    private mapInstanceServerToEntity;
    private mapBaremetalServerToEntity;
    private mapInstanceServerToDto;
    private mapBaremetalServerToDto;
    testConnection(): Promise<{
        success: boolean;
        error?: string;
    }>;
    listInstances(filters?: any): Promise<InstanceEntity[]>;
    listServersAsDto(): Promise<ServerResponseDto[]>;
    getServerDetailsAsDto(serverId: string): Promise<ServerResponseDto | null>;
    createServer(config: CreateServerConfig): Promise<ServerCreationResult>;
    private createInstanceServer;
    private createBaremetalServer;
    deleteServer(config: DeleteServerDto): Promise<ServerDeletionResult>;
    getServerStatus(serverId: string): Promise<string>;
    powerOnServer(serverId: string): Promise<void>;
    changeServerType(serverId: string, config: ChangeServerTypeConfig): Promise<{
        actionId?: number;
    }>;
    expandVolume(volumeId: string, newSizeGb: number): Promise<{
        actionId?: number;
    }>;
    detachVolume(volumeId: string): Promise<{
        actionId?: number;
    }>;
    deleteVolume(volumeId: string): Promise<void>;
    listFluiManagedVolumes(): Promise<ProviderVolumeSummary[]>;
    private parseVolumeRef;
    powerOffServer(serverId: string): Promise<void>;
    updateServerLabels(serverId: string, labels: Record<string, string>): Promise<void>;
    getNodeSizes(includeAvailability?: boolean): Promise<NodeSizeDto[]>;
    createVNet(config: CreateVNetConfig): Promise<VNetCreationResult>;
    deleteVNet(vnetId: string): Promise<VNetDeletionResult>;
    getVNet(vnetId: string): Promise<VNetDetails | null>;
    listVNets(): Promise<VNetDetails[]>;
    addSubnet(config: AddSubnetConfig): Promise<{
        actionId?: number;
    }>;
    deleteSubnet(config: DeleteSubnetConfig): Promise<{
        actionId?: number;
    }>;
    addRoute(config: AddRouteConfig): Promise<{
        actionId?: number;
    }>;
    deleteRoute(config: DeleteRouteConfig): Promise<{
        actionId?: number;
    }>;
    attachServerToVNet(config: AttachServerToVNetConfig): Promise<ServerVNetAttachmentResult>;
    detachServerFromVNet(config: DetachServerFromVNetConfig): Promise<{
        actionId?: number;
    }>;
    private extractRegionFromLabels;
    resolveSSHKeys(keys: SshKeyInfo[]): Promise<string[]>;
    listSSHKeys(): Promise<SSHKeyDto[]>;
    createSSHKey(name: string, publicKey: string, labels?: Record<string, string>): Promise<SSHKeyCreationResult>;
    deleteSSHKey(providerKeyId: string): Promise<void>;
    getSSHKey(providerKeyId: string): Promise<SSHKeyDetails>;
    private extractKeyType;
}
