const fetch = require('node-fetch')
const { log, logError } = require('../util/logger')

// Request options for all fetch calls
const options = {
    headers: {
        // For getting topics, see note on https://developer.github.com/v3/search/
        // Accept: 'application/vnd.github.mercy-preview+json'
        Accept: 'application/vnd.github.preview'
    }
}

const arrSum = arr => arr.reduce((a, b) => a + b, 0)

//
// Fetch all public GitHub repos
//
const fetchGitHubRepos = async () => {
    const url = 'https://api.github.com/orgs/oceanprotocol/repos?type=public&per_page=200'
    const start = Date.now()
    const response = await fetch(url, options)

    if (response.status !== 200) {
        logError(`Non-200 response code from GitHub: ${response.status}`)
        return null
    }

    const json = await response.json()

    let numbers = []

    json.map(item => {
        if (item.stargazers_count) {
            return numbers.push(item.stargazers_count)
        }
        return null
    })

    const stars = arrSum(numbers)
    const repositories = json.length

    log(
        `Re-built github cache. ` +
        `Total: ${repositories} public projects with a total of ${stars} stargazers. ` +
        `Elapsed: ${new Date() - start}ms`
    )

    return { stars, repositories }
}

module.exports = fetchGitHubRepos