require("isomorphic-fetch")
const invariant = require("invariant")

const CloudflareEmail = process.env.CLOUDFLARE_EMAIL
const CloudflareKey = process.env.CLOUDFLARE_KEY
const RayID = process.argv[2]

invariant(CloudflareEmail, "Missing the $CLOUDFLARE_EMAIL environment variable")

invariant(CloudflareKey, "Missing the $CLOUDFLARE_KEY environment variable")

invariant(RayID, "Missing the RAY_ID argument; use `heroku run node show-log.js RAY_ID`")

function getZones(domain) {
  return fetch(`https://api.cloudflare.com/client/v4/zones?name=${domain}`, {
    method: "GET",
    headers: {
      "X-Auth-Email": CloudflareEmail,
      "X-Auth-Key": CloudflareKey
    }
  })
    .then(res => res.json())
    .then(data => data.result)
}

function getLog(zoneId, rayId) {
  return fetch(`https://api.cloudflare.com/client/v4/zones/${zoneId}/logs/requests/${rayId}`, {
    method: "GET",
    headers: {
      "X-Auth-Email": CloudflareEmail,
      "X-Auth-Key": CloudflareKey
    }
  }).then(res => (res.status === 404 ? "NOT FOUND" : res.json()))
}

getZones("unpkg.com").then(zones => {
  getLog(zones[0].id, RayID).then(entry => {
    console.log(entry)
  })
})