import {fetch} from './fetch';

/**
 * This function takes the return data obejct and removes the
 * calnedar parameter as it's unnecessary.
 */
function normalizeReturn(data, type) {
  let newData = data;

  if (type) {
    newData = data[type];
  }

  return newData;
}

export default class CalendarService {

  constructor() {
    this.baseUrl = process.env.API_ROOT + '/api/v2/calendar/';
    this.limit = 50;
    this.key = '05cb59286aef4c7eb3406dcb7d7045fb';
    this.type = false;
  }

  getCalendars(page, limit, tickers, type = null, dateStart = null, dateEnd = null) {
    let url = this.baseUrl;
    this.type = (type ? type : '');

    url += (this.type ? this.type : '');
    url += '?token=' + this.key;
    url += '&page=' + (page ? page : 0);
    url += '&pagesize=' + (limit ? limit : this.limit);
    url += '&parameters[display]=flat';

    // Expected STRING, delimited by a comma (,)
    if (tickers) {
      url += '&parameters[tickers]=' + tickers;
    }

    // Expected YYYY-MM-DD
    if (dateStart && dateEnd) {
      url += '&parameters[date_from]=' + dateStart;
      url += '&parameters[date_to]=' + dateEnd;
    } else if (dateStart) {
      url += '&parameters[date]=' + dateStart;
    } else if (dateEnd) {
      url += '&parameters[date]=' + dateEnd;
    }

    return new Promise((resolve, reject) => {
      fetch(url, {
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json'
        },
        method: 'get'
      })
      .then(resp => resp.json())
      .then(data => {
        // const result = normalizeReturn(data, type);
        const result = data;
        resolve(result);
      })
      .catch(err => reject(err));
    });
  }

}
