/**
 * Health Metric Display Object
 *
 * Provides formatting and display logic for health metrics.
 * This display object isolates UI-specific formatting from business logic.
 */

export class HealthMetricDisplay {
  static formatUptime(uptime?: number): string {
    if (uptime === undefined || uptime === null) return 'N/A';
    if (uptime < 0) return 'N/A';
    
    // Format as percentage with 2 decimal places
    return `${uptime.toFixed(2)}%`;
  }

  static formatResponseTime(responseTime?: number): string {
    if (responseTime === undefined || responseTime === null) return 'N/A';
    if (responseTime < 0) return 'N/A';
    
    // Format as milliseconds with appropriate units
    if (responseTime < 1000) {
      return `${responseTime.toFixed(0)}ms`;
    } else if (responseTime < 60000) {
      return `${(responseTime / 1000).toFixed(2)}s`;
    } else {
      return `${(responseTime / 60000).toFixed(2)}m`;
    }
  }

  static formatErrorRate(errorRate?: number): string {
    if (errorRate === undefined || errorRate === null) return 'N/A';
    if (errorRate < 0) return 'N/A';
    
    // Format as percentage with 2 decimal places
    return `${errorRate.toFixed(2)}%`;
  }

  static formatTimestamp(timestamp: string): string {
    const date = new Date(timestamp);
    return date.toLocaleString('en-US', {
      year: 'numeric',
      month: 'short',
      day: 'numeric',
      hour: '2-digit',
      minute: '2-digit',
      second: '2-digit',
    });
  }

  static formatSuccessRate(checksPassed?: number, checksFailed?: number): string {
    const passed = checksPassed || 0;
    const failed = checksFailed || 0;
    const total = passed + failed;
    
    if (total === 0) return 'N/A';
    
    const successRate = (passed / total) * 100;
    return `${successRate.toFixed(1)}%`;
  }
}
