const subDays = require('date-fns/sub_days')
const prettyBytes = require('pretty-bytes')
const table = require('text-table')
const {
  sumKeys,
  sumTopScores,
  createDayKey
} = require('../server/StatsServer')

const now = new Date

const createRange = (start, end) => {
  const range = []

  while (start < end)
    range.push(start++)

  return range
}

const createPastDays = (n) =>
  createRange(1, n + 1).map(days => subDays(now, days)).reverse()

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

Promise.all([
  sumKeys(pastSevenDays.map(date => `stats-requests-${createDayKey(date)}`)),
  sumKeys(pastSevenDays.map(date => `stats-bandwidth-${createDayKey(date)}`)),
  sumKeys(pastThirtyDays.map(date => `stats-requests-${createDayKey(date)}`)),
  sumKeys(pastThirtyDays.map(date => `stats-bandwidth-${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])
  )

  sumTopScores(pastSevenDays.map(date => `stats-packageRequests-${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()
  })
})