var parse = require('csv-parse/lib/sync')
require('request')
var request = require('request-promise')
var average = require('average')
var sum = require('math-sum')
exports.endpoint = async function(req, res) {
var csvData = await request('https://docs.google.com/spreadsheets/d/1ulixrlBK9SsPhhTZKR35fwKutLaZMYMFrWqtMFlZLvU/pub?gid=0&single=true&output=csv')
var data = parse(csvData)
const places = data.slice(2).reduce((acc, line) => {
if (line[1] && line[3] && line[5] && line[7]) {
acc[line[1]] = [...acc[line[1]] || [], 1]
acc[line[3]] = [...acc[line[3]] || [], 2]
acc[line[5]] = [...acc[line[5]] || [], 3]
acc[line[7]] = [...acc[line[7]] || [], 4]
}
return acc
}, {})
const lastGame = data.map(x => x[0]).filter(Boolean).pop()
const result = Object
.entries(places)
.map(([name, places]) => ({
name,
average: average(places).toFixed(2),
games: places.length,
naiveRate: 1500 + sum(places.map(x => [30, 10, -10, -30][x - 1]))
}))
.sort((a,b) => b.naiveRate - a.naiveRate)
.map(({name, games, average, naiveRate}) => `${naiveRate} ${name} ${average} (${games})`)
.join('\n')
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.end(`<html><pre>${result}\n\nLast game: ${lastGame}</pre></html>`);
}