<script>
export default {
  name: 'EbMoney',
  props: {
    amount: {
      default: 0.0,
      type: [Number, String],
      validator: val => !isNaN(val),
      coerce: val => parseFloat(val)
    },
    currency: {
      default: 'GBP'
    },
    showCurrency: {
      type: Boolean,
      default: false
    }
  },

  computed: {
    currencySymbol() {
      let symbols = {
        EUR: '€',
        USD: '$',
        GBP: '£',
        NGN: '₦',
        AED: 'د.إ',
        CNY: '¥',
        CHF: 'CHF',
        GHC: 'GH₵',
        AFN: 'Af',
        ALL: 'L',
        AMD: 'Դ',
        AOA: 'Kz',
        ARS: '$',
        AUD: '$',
        AWG: 'ƒ',
        AZN: 'ман',
        BAM: 'КМ',
        BBD: '$',
        BDT: '৳',
        BGN: 'лв',
        BHD: 'ب.د',
        BIF: '₣',
        BMD: '$',
        BND: '$',
        BOB: 'Bs.',
        BRL: 'R$',
        BSD: '$',
        BTN: 'Nu',
        BWP: 'P',
        BYR: 'Br',
        BZD: '$',
        CAD: '$',
        CDF: '₣',
        CHF: '₣',
        CLP: '$',
        CNY: '¥',
        COP: '$',
        CRC: '₡',
        CUP: '$',
        CVE: '$',
        CZK: 'Kč',
        DJF: '₣',
        DKK: 'kr',
        DOP: '$',
        DZD: 'د.ج',
        EGP: '£',
        ERN: 'Nfk',
        ETB: 'Br',
        FJD: '$',
        FKP: '£',
        GEL: 'ლ',
        GHS: '₵',
        GIP: '£',
        GMD: 'D',
        GNF: '₣',
        GTQ: 'Q',
        GYD: '$',
        HKD: '$',
        HNL: 'L',
        HRK: 'Kn',
        HTG: 'G',
        HUF: 'Ft',
        IDR: 'Rp',
        ILS: '₪',
        INR: '₹',
        IQD: 'ع.د',
        IRR: '﷼',
        ISK: 'Kr',
        JMD: '$',
        JOD: 'د.ا',
        JPY: '¥',
        KES: 'Sh',
        KGS: 'С̣',
        KHR: '៛',
        KPW: '₩',
        KRW: '₩',
        KWD: 'د.ك',
        KYD: '$',
        KZT: '〒',
        LAK: '₭',
        LBP: 'ل.ل',
        LKR: 'Rs',
        LRD: '$',
        LSL: 'L',
        LYD: 'ل.د',
        MAD: 'د.م.',
        MDL: 'L',
        MGA: 'Ar',
        MKD: 'ден',
        MMK: 'K',
        MNT: '₮',
        MOP: 'P',
        MRO: 'UM',
        MUR: '₨',
        MVR: 'ރ.',
        MWK: 'MK',
        MXN: '$',
        MYR: 'RM',
        MZN: 'MTn',
        NAD: '$',
        NIO: 'C$',
        NOK: 'kr',
        NPR: '₨',
        NZD: '$',
        OMR: 'ر.ع.',
        PAB: 'B/.',
        PEN: 'S/.',
        PGK: 'K',
        PHP: '₱',
        PKR: '₨',
        PLN: 'zł',
        PYG: '₲',
        QAR: 'ر.ق',
        RON: 'L',
        RSD: 'din',
        RUB: 'р.',
        RWF: '₣',
        SAR: 'ر.س',
        SBD: '$',
        SCR: '₨',
        SDG: '£',
        SEK: 'kr',
        SGD: '$',
        SHP: '£',
        SLL: 'Le',
        SOS: 'Sh',
        SRD: '$',
        STD: 'Db',
        SYP: 'ل.س',
        SZL: 'L',
        THB: ' ฿',
        TJS: 'ЅМ',
        TMT: 'm',
        TND: 'د.ت',
        TOP: 'T$',
        TRY: '₤',
        TTD: '$',
        TWD: '$',
        TZS: 'Sh',
        UAH: '₴',
        UGX: 'Sh',
        USD: '$',
        UYU: '$',
        UZS: ' soʻm',
        VEF: 'Bs F',
        VND: '₫',
        VUV: 'Vt',
        WST: 'T',
        XAF: '₣',
        XCD: '$',
        XPF: '₣',
        YER: '﷼',
        ZAR: 'R',
        ZMW: 'ZK',
        ZWL: '$'
      };

      return symbols[this.currency.toUpperCase()]
        ? symbols[this.currency.toUpperCase()]
        : this.currency.toUpperCase();
    },

    mainAmount() {
      return this.amount === null || this.amount === undefined
        ? 0
        : Number(this.amount);
    }
  },
  methods: {
    convertedMoney() {
      return (
        this.currencySymbol +
        this.mainAmount.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,') +
        (this.showCurrency ? ' (' + this.currency + ')' : '')
      );
    }
  },

  render(createElement) {
    return createElement('span', {}, [this.convertedMoney()]);
  }
};
</script>
