import { NodeSizeDto } from '../../../src/modules/providers/dto/node-size.dto';
export interface ServerTypeValidationResult {
    isValid: boolean;
    serverType?: NodeSizeDto;
    suggestedAlternative?: NodeSizeDto;
    suggestedRegion?: string;
    reason?: string;
}
export interface RegionAvailabilityResult {
    available: boolean;
    serverType?: NodeSizeDto;
    region: string;
}
export interface ServerTypeSimilarityScore {
    serverType: NodeSizeDto;
    score: number;
    reasons: string[];
}
export declare class ServerTypeValidatorService {
    /**
     * Validate if a server type exists and is available
     */
    validateServerType(requestedType: string, availableTypes: NodeSizeDto[], region?: string): ServerTypeValidationResult;
    /**
     * Find the most similar server type based on specs
     */
    findSimilarServerType(reference: NodeSizeDto, availableTypes: NodeSizeDto[], region?: string): NodeSizeDto | undefined;
    /**
     * Calculate similarity score between two server types
     */
    private calculateSimilarityScore;
    /**
     * Get monthly price for a server type
     */
    private getMonthlyPrice;
    /**
     * Get formatted price information for a server type
     */
    getFormattedPrice(serverType: NodeSizeDto): {
        monthly?: string;
        hourly?: string;
        currency: string;
    };
    /**
     * Get available regions for a server type
     * Uses real-time availability data if available, falls back to locations
     */
    getAvailableRegions(serverType: NodeSizeDto): string[];
    /**
     * Check if server type is available in a specific region (real-time check)
     */
    isAvailableInRegion(serverType: NodeSizeDto, region: string): boolean;
    /**
     * Get regions where server type is out of stock
     */
    getOutOfStockRegions(serverType: NodeSizeDto): string[];
    /**
     * Format availability info for display
     */
    formatAvailabilityInfo(serverType: NodeSizeDto): string;
    /**
     * Format server type info as string
     */
    formatServerTypeInfo(serverType: NodeSizeDto): string;
    /**
     * Find first available server type across multiple regions
     * Checks regions in priority order and returns first match
     */
    findServerTypeInRegions(requestedType: string, availableTypes: NodeSizeDto[], regions: string[]): RegionAvailabilityResult | null;
    /**
     * Find best fallback server type across multiple regions
     * Tries fallback types in order across all regions
     */
    findFallbackServerTypeInRegions(fallbackTypes: string[], availableTypes: NodeSizeDto[], regions: string[]): RegionAvailabilityResult | null;
    /**
     * Validate server type with multi-region fallback
     * Returns the best match considering region availability
     */
    validateServerTypeWithRegionFallback(requestedType: string, availableTypes: NodeSizeDto[], preferredRegion: string, fallbackRegions: string[], fallbackTypes: string[]): ServerTypeValidationResult;
}
