/* eslint-disable @typescript-eslint/no-namespace */
import { formatUnits, parseUnits } from 'viem';

export namespace Parsers {
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  export function bigIntReplacer(_key: string, value: any): any {
    if (typeof value === 'bigint') {
      return value.toString();
    }

    if (typeof value === 'string' && /^\d+n$/.test(value)) {
      return value.slice(0, -1);
    }

    return value;
  }

  export function bigintToFloat(amount: bigint, decimals: number): number {
    const formatted = formatUnits(amount, decimals);
    const result = parseFloat(formatted);

    return result;
  }

  export function floatToBigint(usdValue: number, decimals: number): bigint {
    const valueString = usdValue.toFixed(decimals);

    return parseUnits(valueString, decimals);
  }
}
