import { CryptoAsset, CryptoNetwork } from "@prisma/client";

export type SupportedCryptoAsset = {
  asset: CryptoAsset;
  network: CryptoNetwork;
  label: string;
  ticker: string;
  decimals: number;
  requiredConfirmations: number;
};

export const SUPPORTED_CRYPTO_ASSETS: SupportedCryptoAsset[] = [
  {
    asset: CryptoAsset.BTC,
    network: CryptoNetwork.BITCOIN,
    label: "Bitcoin",
    ticker: "BTC",
    decimals: 8,
    requiredConfirmations: 3
  },
  {
    asset: CryptoAsset.ETH,
    network: CryptoNetwork.ETHEREUM,
    label: "Ethereum",
    ticker: "ETH",
    decimals: 18,
    requiredConfirmations: 12
  },
  {
    asset: CryptoAsset.USDC,
    network: CryptoNetwork.ETHEREUM,
    label: "USD Coin",
    ticker: "USDC",
    decimals: 6,
    requiredConfirmations: 12
  },
  {
    asset: CryptoAsset.USDT,
    network: CryptoNetwork.ETHEREUM,
    label: "Tether",
    ticker: "USDT",
    decimals: 6,
    requiredConfirmations: 12
  }
];

export function cryptoAssetConfig(asset: CryptoAsset) {
  return SUPPORTED_CRYPTO_ASSETS.find((item) => item.asset === asset);
}

export function requireCryptoAssetConfig(asset: CryptoAsset) {
  const config = cryptoAssetConfig(asset);

  if (!config) {
    throw new Error(`Unsupported crypto asset: ${asset}`);
  }

  return config;
}

export function formatNetwork(network: CryptoNetwork) {
  return network === CryptoNetwork.BITCOIN ? "Bitcoin" : "Ethereum ERC-20";
}
