const subDays = require("date-fns/sub_days");
const prettyBytes = require("pretty-bytes");
const table = require("text-table");

const StatsAPI = require("../server/StatsAPI");
const now = new Date();

function createRange(start, end) {
  const range = [];
  while (start < end) range.push(start++);
  return range;
}

function createPastDays(n) {
  return createRange(1, n + 1)
    .map(days => subDays(now, days))
    .reverse();
}

const pastSevenDays = createPastDays(7);
const pastThirtyDays = createPastDays(30);

Promise.all([
  StatsAPI.sumKeys(
    pastSevenDays.map(date => `stats-requests-${StatsAPI.createDayKey(date)}`)
  ),
  StatsAPI.sumKeys(
    pastSevenDays.map(date => `stats-bandwidth-${StatsAPI.createDayKey(date)}`)
  ),
  StatsAPI.sumKeys(
    pastThirtyDays.map(date => `stats-requests-${StatsAPI.createDayKey(date)}`)
  ),
  StatsAPI.sumKeys(
    pastThirtyDays.map(date => `stats-bandwidth-${StatsAPI.createDayKey(date)}`)
  )
]).then(results => {
  console.log("\n## Summary");
  console.log("Requests this week: %s", results[0].toLocaleString());
  console.log("Bandwidth this week: %s", prettyBytes(results[1]));
  console.log("Requests this month: %s", results[2].toLocaleString());
  console.log("Bandwidth this month: %s", prettyBytes(results[3]));

  StatsAPI.sumTopScores(
    pastSevenDays.map(
      date => `stats-packageRequests-${StatsAPI.createDayKey(date)}`
    )
  ).then(topPackages => {
    console.log("\n## Top Packages This Week");

    topPackages.forEach(result => {
      result[1] = result[1].toLocaleString();
    });

    console.log(table(topPackages));

    process.exit();
  });
});