/* eslint-disable no-console */
const readline = require("readline");
const WebSocket = require("ws");
const ws = new WebSocket("ws://localhost:8080");

const { CloudEvent } = require("cloudevents");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("close", (_) => console.log("\n\nConnection closed! Press CTL-C to exit."));

ws.on("message", function incoming(message) {
  const event = new CloudEvent(JSON.parse(message));
  if (event.type === "weather.error") {
    console.error(`Error: ${event.data}`);
  } else {
    print(event.data);
  }
  ask();
});

function ask() {
  rl.question("Would you like to see the current weather? Provide a zip code: ", function (zip) {
    console.log("Fetching weather data from server...");
    const event = new CloudEvent({
      type: "weather.query",
      source: "/weather.client",
      data: { zip },
    });
    ws.send(event.toString());
  });
}

function print(data) {
  console.log(`
Current weather for ${data.name}: ${data.weather[0].main}
------------------------------------------
With ${data.weather[0].description}, the temperature is ${Math.round(data.main.temp)}F
and the wind is blowing at ${Math.round(data.wind.speed)}mph.
`);
}

ask();