/**
 * Format a number for display with proper precision
 */
export function formatNumber(
  value: number,
  options: {
    maxDecimals?: number;
    minDecimals?: number;
    notation?: 'standard' | 'scientific' | 'engineering' | 'compact';
  } = {}
): string {
  const {
    maxDecimals = 6,
    minDecimals = 0,
    notation = 'standard',
  } = options;

  // Handle edge cases
  if (!isFinite(value)) return value.toString();
  if (value === 0) return '0';

  // Use scientific notation for very large or very small numbers
  const absValue = Math.abs(value);
  const useScientific =
    notation === 'scientific' ||
    (notation === 'standard' && (absValue >= 1e10 || absValue < 1e-6));

  if (useScientific) {
    return value.toExponential(maxDecimals);
  }

  // Format with appropriate decimal places
  const formatted = new Intl.NumberFormat('en-US', {
    minimumFractionDigits: minDecimals,
    maximumFractionDigits: maxDecimals,
    notation: notation === 'compact' ? 'compact' : 'standard',
  }).format(value);

  return formatted;
}

/**
 * Parse a number input string
 */
export function parseNumberInput(input: string): number | null {
  if (!input || input.trim() === '') return null;

  // Remove spaces and replace comma with dot
  const cleaned = input.replace(/\s/g, '').replace(',', '.');

  const parsed = parseFloat(cleaned);

  return isNaN(parsed) ? null : parsed;
}
