import { Label } from './cloud-provider.interface';
export interface VNetSubnetConfig {
    ipRange: string;
    networkZone: string;
    gateway?: string;
    vswitchId?: string;
}
export interface VNetRouteConfig {
    destination: string;
    gateway: string;
}
export interface CreateVNetConfig {
    name: string;
    ipRange: string;
    labels?: Label[];
    subnets?: VNetSubnetConfig[];
    routes?: VNetRouteConfig[];
    exposeRoutesToVSwitch?: boolean;
}
export interface VNetCreationResult {
    vnetId: string;
    ipRange: string;
    subnets?: VNetSubnetInfo[];
}
export interface VNetSubnetInfo {
    id?: string;
    ipRange: string;
    networkZone: string;
    gateway?: string;
}
export interface VNetRouteInfo {
    destination: string;
    gateway: string;
}
export interface VNetDetails {
    id: string;
    name: string;
    ipRange: string;
    subnets: VNetSubnetInfo[];
    routes: VNetRouteInfo[];
    attachedServerIds: string[];
    attachedLoadBalancerIds?: string[];
    labels?: Record<string, string>;
    created?: string;
}
export interface VNetDeletionResult {
    message: string;
    actionId?: number;
}
export interface AddSubnetConfig {
    vnetId: string;
    ipRange?: string;
    networkZone: string;
    vswitchId?: string;
}
export interface AddSubnetResult {
    actionId?: number;
    subnetId?: string;
    ipRange: string;
    networkZone?: string;
    gateway?: string;
}
export interface DeleteSubnetConfig {
    vnetId: string;
    ipRange: string;
}
export interface AddRouteConfig {
    vnetId: string;
    destination: string;
    gateway: string;
}
export interface DeleteRouteConfig {
    vnetId: string;
    destination: string;
    gateway: string;
}
export interface AttachServerToVNetConfig {
    serverId: string;
    vnetId: string;
    ip?: string;
    aliasIps?: string[];
}
export interface DetachServerFromVNetConfig {
    serverId: string;
    vnetId: string;
}
export interface ServerVNetAttachmentResult {
    actionId?: number;
    assignedIp?: string;
    message: string;
}
export interface ChangeIpRangeConfig {
    vnetId: string;
    newIpRange: string;
}
/**
 * Interface for network/VNet operations on cloud providers
 * Implements virtual network management capabilities
 */
export interface INetworkProvider {
    createVNet(config: CreateVNetConfig): Promise<VNetCreationResult>;
    deleteVNet(vnetId: string): Promise<VNetDeletionResult>;
    getVNet(vnetId: string): Promise<VNetDetails | null>;
    listVNets(): Promise<VNetDetails[]>;
    addSubnet(config: AddSubnetConfig): Promise<AddSubnetResult>;
    deleteSubnet(config: DeleteSubnetConfig): Promise<{
        actionId?: number;
    }>;
    addRoute(config: AddRouteConfig): Promise<{
        actionId?: number;
    }>;
    deleteRoute(config: DeleteRouteConfig): Promise<{
        actionId?: number;
    }>;
    changeIpRange?(config: ChangeIpRangeConfig): Promise<{
        actionId?: number;
    }>;
    attachServerToVNet(config: AttachServerToVNetConfig): Promise<ServerVNetAttachmentResult>;
    detachServerFromVNet(config: DetachServerFromVNetConfig): Promise<{
        actionId?: number;
    }>;
    enableVNetProtection?(vnetId: string): Promise<void>;
    disableVNetProtection?(vnetId: string): Promise<void>;
}
