/* eslint-disable */

import sb from 'satoshi-bitcoin'
//////////////////////
// BTC to things /////
/////////////////////
export function btcToSatoshis(btc) {
  if (btc === undefined || btc === null || btc === '') return null

  return sb.toSatoshi(btc)
}

export function btcToBits(btc) {
  if (btc === undefined || btc === null || btc === '') return null

  return satoshisToBits(sb.toSatoshi(btc))
}

export function btcToUsd(btc, price) {
  const amount = parseFloat(btc * price).toFixed(2)
  return (btc > 0 && amount <= 0) ? '< 0.01' : amount.toLocaleString('en')
}

////////////////////////////
// bits to things /////////
////////////////////////// 

export function bitsToBtc(bits, price) {
  if (bits === undefined || bits === null || bits === '') return null
  const sats = bits * 100

  return satoshisToBtc(sats, price)
}

export function bitsToSatoshis(bits, price) {
  if (bits === undefined || bits === null || bits === '') return null
  
  return bits * 100
}

export function bitsToUsd(bits, price) {
  if (bits === undefined || bits === null || bits === '') return null
  const sats = bits * 100

  return satoshisToUsd(sats, price)
}

////////////////////////////
// satoshis to things /////
////////////////////////// 

export function satoshisToBtc(satoshis) {
  if (satoshis === undefined || satoshis === null || satoshis === '') return null

  const btcAmount = sb.toBitcoin(satoshis).toFixed(8)
  return btcAmount > 0 ? btcAmount : btcAmount * -1
}

export function satoshisToBits(satoshis) {
  if (satoshis === undefined || satoshis === null || satoshis === '') return null

  const bitsAmount = satoshis / 100
  return bitsAmount > 0 ? bitsAmount : bitsAmount * -1
}

export function satoshisToUsd(satoshis, price) {
  if (satoshis === undefined || satoshis === null || satoshis === '') return null

  return btcToUsd(satoshisToBtc(satoshis), price)
}


export function renderCurrency(currency) {
  switch (currency) {
    case 'btc':
      return 'BTC'
    case 'bits':
      return 'bits'
    case 'sats':
      return 'satoshis'
    default:
      return 'satoshis'
  }  
}

export function convert(from, to, amount, price) {
  switch (from) {
    case 'btc':
      switch (to) {
        case 'bits':
          return btcToBits(amount)
        case 'sats':
          return btcToSatoshis(amount)
        case 'usd':
          return btcToUsd(amount, price)
        case 'btc':
          return amount
      }
      break
    case 'bits':
      switch (to) {
        case 'btc':
          return bitsToBtc(amount)
        case 'sats':
          return bitsToSatoshis(amount)
        case 'usd':
          return bitsToUsd(amount, price)
        case 'bits':
          return amount
      }
      break
    case 'sats':
      switch (to) {
        case 'btc':
          return satoshisToBtc(amount)
        case 'bits':
          return satoshisToBits(amount)
        case 'usd':
          return satoshisToUsd(amount, price)
        case 'sats':
          return amount
      }
      break
    default:
      return ''
  }
}

export default {
  btcToSatoshis,
  btcToBits,
  btcToUsd,

  bitsToBtc,
  bitsToSatoshis,
  bitsToUsd,

  satoshisToBtc,
  satoshisToBits,
  satoshisToUsd,

  renderCurrency,

  convert
}