var request = require('request');
var cheerio = require('cheerio');
var STRING = require('string');
var logger = require('log4js').getLogger();

module.exports = {
  getTechHistory: function() {
    var url;
    var d;
    var day;
    var month;
    var monthNames = [
        'January',
        'February',
        'March',
        'April',
        'May',
        'June',
        'July',
        'August',
        'September',
        'October',
        'November',
        'December'
    ];

    d = new Date();

    month = monthNames[d.getMonth()];

    day = d.getDate();

    url = ['http://www.computerhistory.org/tdih/', month, '/', day].join('');
    logger.debug(url);
    return new Promise(function(resolve, reject) {
      'use strict';

      request(url, function(err, resp, body) {
        if (err) {
          //  Logger.error(err);
          return reject(err);
          // Throw err;
        }

        var $ = cheerio.load(body);
        var tdihbody = $('#tdihbody');

        var output = [];

        tdihbody.find('.tdihevent > p').each(function(div) {
          var s = $(this).text();
          output.push(STRING(s).collapseWhitespace().s);
        });

        return resolve(output);
      }, function(error, response, body) {
        if (response.statusCode !== 200) {
          logger.error(response.statusCode);
          logger.error(body);
          return reject(error);
        }
      });
    });

  }, getHistory: function() {
    var url;
    var d = new Date();
    var day;
    var month;
    var monthNames = [
        'january',
        'february',
        'march',
        'april',
        'may',
        'june',
        'july',
        'august',
        'september',
        'october',
        'november',
        'december'
    ];

    month = monthNames[d.getMonth()];

    day = d.getDate();

    url = [
        'http://www.bbc.co.uk/scotland/history/onthisday/', month, '/',
        day
    ].join('');

    logger.debug(url);

    return new Promise(function(resolve, reject) {

      request(url, function(err, resp, body) {
        if (err) {
          //  Logger.error(err);
          return reject(err);
          // Throw err;
        }

        var $ = cheerio.load(body);

        var nbody = $('DIV#bbcPageContent').first();
        var output = [];

        nbody.find('.story > p').each(function(div) {

          var s = $(this).text();
          if (s.indexOf('Today\'s recipe:') == -1) {
            output.push(s);
          }
        });

        return resolve(output);

      }, function(error, response, body) {
        if (response.statusCode !== 200) {
          logger.error(response.statusCode);
          logger.error(body);
          return reject(error);
        }
      });

    });

  },
  updateHistory: function() {
    'use strict';
    var output = [];
    return new Promise(function(resolve, reject) {
      module.exports.getHistory()
                .then((d)=> {

                  output = d;

                  module.exports.getTechHistory()
                        .then((d) => {
                          output = output.concat(d);

                          return resolve(output)
                        })
                        .catch((e) => {
                          logger.error(e);
                          return reject(e);
                        });

                })
                .catch((e) => {
                  logger.error(e);
                  return reject(e);
                });

    })
  }
};