text: const ObservableStore = require('obs-store')
  const extend = require('xtend')
  
  // every ten minutes
  const POLLING_INTERVAL = 600000
  
  class CurrencyController {
  
    constructor (opts = {}) {
      const initState = extend({
        currentCurrency: 'USD',
        conversionRate: 0,
        conversionDate: 'N/A',
      }, opts.initState)
      this.store = new ObservableStore(initState)
    }
  
    //
    // PUBLIC METHODS
    //
  
    getCurrentCurrency () {
      return this.store.getState().currentCurrency
    }
  
    setCurrentCurrency (currentCurrency) {
      this.store.updateState({ currentCurrency })
    }
  
    getConversionRate () {
      return this.store.getState().conversionRate
    }
  
    setConversionRate (conversionRate) {
      this.store.updateState({ conversionRate })
    }
  
    getConversionDate () {
      return this.store.getState().conversionDate
    }
  
    setConversionDate (conversionDate) {
      this.store.updateState({ conversionDate })
    }
  
    updateConversionRate () {
      const currentCurrency = this.getCurrentCurrency()
      return fetch(`https://www.cryptonator.com/api/ticker/eth-${currentCurrency}`)
      .then(response => response.json())
      .then((parsedResponse) => {
        this.setConversionRate(Number(parsedResponse.ticker.price))
        this.setConversionDate(Number(parsedResponse.timestamp))
      }).catch((err) => {
        console.warn('MetaMask - Failed to query currency conversion.')
        this.setConversionRate(0)
        this.setConversionDate('N/A')
      })
    }
  
    scheduleConversionInterval () {
      if (this.conversionInterval) {
        clearInterval(this.conversionInterval)
      }
      this.conversionInterval = setInterval(() => {
        this.updateConversionRate()
      }, POLLING_INTERVAL)
    }
  }
  
  module.exports = CurrencyController
  