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()
  })
})