/**
 * Swiss accounting number format: #'##0.00
 * Apostrophe as thousands separator, dot as decimal, always 2 decimals.
 *
 * Examples: 1'234.56  |  -50.00  |  0.00  |  12'345'678.90
 *
 * @param dashOnZero  If true, return "—" when the value is 0.
 */
export const formatAmount = (value: unknown, dashOnZero = false): string => {
  const num = typeof value === 'number' ? value : parseFloat(String(value));
  if (isNaN(num)) return '—';
  if (dashOnZero && num === 0) return '—';

  const isNegative = num < 0;
  const [intPart, decPart] = Math.abs(num).toFixed(2).split('.');
  const grouped = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, "'");

  return `${isNegative ? '-' : ''}${grouped}.${decPart}`;
};

/**
 * Format a percentage value with 2 decimals (no thousands separator).
 * Returns "—" when the value is 0, null, undefined or NaN.
 *
 * Examples: 7.70%  |  19.00%  |  — (for 0)
 */
export const formatPercent = (value: unknown): string => {
  const num = typeof value === 'number' ? value : parseFloat(String(value));
  if (isNaN(num) || num === 0) return '—';
  return `${num.toFixed(2)}%`;
};
