import { FetchCCRatesSucceeded, RatesAction, CCResponse } from 'actions/rates';
import { TypeKeys } from 'actions/rates/constants';

// SYMBOL -> PRICE TO BUY 1 ETH
export interface State {
  rates: { [symbol: string]: CCResponse['rates'] };
  ratesError?: string | null;
}

export const INITIAL_STATE: State = {
  rates: {},
  ratesError: null
};

function fetchCCRatesSucceeded(state: State, action: FetchCCRatesSucceeded): State {
  return {
    ...state,
    rates: {
      ...state.rates,
      ...action.payload
    }
  };
}

function fetchCCRatesFailed(state: State): State {
  // TODO: Make library for error messages
  return {
    ...state,
    ratesError: 'Sorry. We were unable to fetch equivalent rates.'
  };
}

export function rates(state: State = INITIAL_STATE, action: RatesAction): State {
  switch (action.type) {
    case TypeKeys.RATES_FETCH_CC_SUCCEEDED:
      return fetchCCRatesSucceeded(state, action);
    case TypeKeys.RATES_FETCH_CC_FAILED:
      return fetchCCRatesFailed(state);
    default:
      return state;
  }
}