import { getFormatter } from './intlNumberFormat';

export function formatCredits(amount, precision, shortFormat = false) {
  const language = localStorage.getItem('language') || undefined;
  const actualAmount = Number(amount);
  const safePrecision = Math.min(20, Math.max(1, precision || 0));

  if (Number.isNaN(actualAmount) || actualAmount === 0) return '0';

  if (shortFormat) {
    const formatter = getFormatter(language, {
      minimumFractionDigits: safePrecision,
      maximumFractionDigits: safePrecision,
      roundingIncrement: 5,
      // Display suffix (M, K, etc.)
      notation: 'compact',
      compactDisplay: 'short',
    });
    return formatter.format(actualAmount);
  }

  const formatter = getFormatter(language, {
    minimumFractionDigits: safePrecision,
    maximumFractionDigits: safePrecision,
    roundingIncrement: 5,
  });
  return formatter.format(actualAmount);
}

export function formatFullPrice(amount, precision = 1) {
  let formated = '';

  const quantity = amount.toString().split('.');
  const fraction = quantity[1];

  if (fraction) {
    const decimals = fraction.split('');
    const first = decimals.filter((number) => number !== '0')[0];
    const index = decimals.indexOf(first);

    // Set format fraction
    formated = `.${fraction.substring(0, index + precision)}`;
  }

  return parseFloat(quantity[0] + formated);
}

export function creditsToString(amount) {
  const creditString = parseFloat(amount).toFixed(8);
  return creditString;
}