import test from "node:test";
import assert from "node:assert/strict";
import {
  formatBaseUnitAmount,
  normalizeEvmAmount,
  normalizeSolanaNativeAmount,
  normalizeSolanaTokenAmount,
} from "./AssetAmountNormalizer";

test("formats base-unit token amounts into display amounts", () => {
  assert.equal(formatBaseUnitAmount("31250000", 6), "31.25");
  assert.equal(formatBaseUnitAmount("1000000000000000000", 18), "1");
  assert.equal(formatBaseUnitAmount("1500000000", 9), "1.5");
});

test("normalizes native solana lamports into SOL amounts", () => {
  assert.equal(normalizeSolanaNativeAmount("1500000000"), "1.5");
  assert.equal(normalizeSolanaNativeAmount(5000000), "0.005");
});

test("normalizes raw solana token amounts using decimals", () => {
  assert.equal(normalizeSolanaTokenAmount("31250000", 6), "31.25");
  assert.equal(normalizeSolanaTokenAmount("42000000", null, "42"), "42");
});

test("normalizes raw EVM token amounts using decimals", () => {
  assert.equal(
    normalizeEvmAmount({
      rawValue: "0x1dcd6500",
      decimals: "6",
      value: null,
      isNative: false,
    }),
    "500"
  );
});

test("prefers human native EVM value when provider already exposes it", () => {
  assert.equal(
    normalizeEvmAmount({
      rawValue: null,
      decimals: null,
      value: "0.75",
      isNative: true,
    }),
    "0.75"
  );
});
