import { formatCurrencyUnit } from "@ledgerhq/coin-module-framework/currencies/index";
import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
import type { CommonDeviceTransactionField } from "@ledgerhq/ledger-wallet-framework/transaction/common";
import { log } from "@ledgerhq/logs";
import { Account, AccountLike } from "@ledgerhq/types-live";

import { methodToString } from "../common-logic/utils";
import { Transaction, TransactionStatus } from "../types";

const currency = getCryptoCurrencyById("internet_computer");

async function getDeviceTransactionConfig({
  transaction,
}: {
  account: AccountLike;
  parentAccount: Account | null | undefined;
  transaction: Transaction;
  status: TransactionStatus;
}): Promise<Array<CommonDeviceTransactionField>> {
  const fields: Array<CommonDeviceTransactionField> = [];
  fields.push({
    type: "text",
    label: "Transaction Type",
    value: methodToString(0),
  });
  fields.push({
    type: "text",
    label: "Payment (ICP)",
    value: formatCurrencyUnit(currency.units[0], transaction.amount, {
      showCode: false,
      disableRounding: true,
    }),
  });
  fields.push({
    type: "text",
    label: "Maximum fee (ICP)",
    value: formatCurrencyUnit(currency.units[0], transaction.fees, {
      showCode: false,
      disableRounding: true,
    }),
  });
  fields.push({
    type: "text",
    label: "Memo",
    value: transaction.memo ?? "0",
  });

  log("debug", `Transaction config ${JSON.stringify(fields)}`);

  return fields;
}

export default getDeviceTransactionConfig;
