const FRACTIONS: [number, string][] = [
  [1 / 8, "⅛"],
  [1 / 4, "¼"],
  [1 / 3, "⅓"],
  [3 / 8, "⅜"],
  [1 / 2, "½"],
  [5 / 8, "⅝"],
  [2 / 3, "⅔"],
  [3 / 4, "¾"],
  [7 / 8, "⅞"],
];

export function formatQuantity(value: number): string {
  if (value === 0) return "0";

  const whole = Math.floor(value);
  const decimal = value - whole;

  if (decimal < 0.05) return whole === 0 ? "0" : String(whole);
  if (decimal > 0.95) return String(whole + 1);

  let bestFraction = "";
  let bestDiff = Infinity;
  for (const [frac, symbol] of FRACTIONS) {
    const diff = Math.abs(decimal - frac);
    if (diff < bestDiff) {
      bestDiff = diff;
      bestFraction = symbol;
    }
  }

  if (bestDiff > 0.06) {
    return value.toFixed(1);
  }

  return whole === 0 ? bestFraction : `${whole} ${bestFraction}`;
}

export function hasQuantity(quantity: string | null | undefined): boolean {
  if (!quantity) return false;
  const raw = parseFloat(quantity);
  return !isNaN(raw) && raw !== 0;
}

export function scaleQuantity(baseQuantity: string | null, base: number, desired: number): string {
  if (!baseQuantity) return "";
  const raw = parseFloat(baseQuantity);
  if (isNaN(raw)) return baseQuantity;
  if (raw === 0) return "";
  const scale = base === 0 ? 1 : desired / base;
  return formatQuantity(raw * scale);
}
