export function formatTicks(val: number, unit?: string, minimumFractionDigits = 0, maximumFractionDigits = 0): string {
  return `${formatDecimalNumber(val, minimumFractionDigits, maximumFractionDigits)}${unit ? ' ' + unit : ''}`;
}

export function formatWithThousandsSeprators(value: number, minimumFractionDigits = 2, maximumFractionDigits = 2): string {
  if (Math.abs(Number(value)) >= 1.0e6) {
    return formatDecimalNumber(value / 1.0e6, minimumFractionDigits, maximumFractionDigits) + ' M';
  } else if (Math.abs(Number(value)) >= 1.0e3) {
    return formatDecimalNumber(value / 1.0e3, minimumFractionDigits, maximumFractionDigits) + ' K';
  } else {
    return formatDecimalNumber(value, minimumFractionDigits, maximumFractionDigits);
  }
}

export function formatDecimalNumber(value: number, minimumFractionDigits = 2, maximumFractionDigits = 2) {
  return new Intl.NumberFormat(
    new Intl.NumberFormat().resolvedOptions().locale,
    {
      style: 'decimal',
      minimumFractionDigits,
      maximumFractionDigits
    }
  ).format(value);
}

export function getPatternIndexWithShift(
  dataSetIndex: number,
  patternShifting?: number
) {
  return patternShifting ? (dataSetIndex + patternShifting) % 6 : dataSetIndex;
}

export function formatValueAndRate(doughnutData: any, dataIndex: number) {
  const textValue = `${formatWithThousandsSeprators(doughnutData.data[dataIndex].value)} (${formatWithThousandsSeprators(doughnutData.data[dataIndex].rate)}%)`;
  return textValue;
}
