#!/usr/bin/env ruby
# Fetch weather for your city from OpenWeatherMap
# You need an API key to fetch data, and store the API key inside ENV
# export I3_OWM_APIKEY="0986273cf8ac41578b90bcc90bc559b4"
# Depends on Weather Icons: https://erikflowers.github.io/weather-icons/

require 'open-uri'
require 'json'
# Get info from open weather map
class Weather
  API = 'http://api.openweathermap.org/data/2.5/weather?id=CITY&units=metric&APPID=APIKEY'
  API_KEY = 'API-KEY-HERE'

  attr_accessor :api_url, :weather

  def initialize(city)
    @api_url = API.gsub('CITY', city).gsub('APIKEY', API_KEY)
    @weather = contact_openweathermap
  end

  # Public - Return formated response - temperature / weather
  #
  # Returns String
  def show
    info = @weather['weather'][0]['main']
    temp = @weather['main']['temp']
    " #{temp}   #{icon(info)} #{info}"
  end

  private

  # Private - Use FontAwesome icons to show the weather conditions
  #
  # Returns Unicode char
  def icon(weather)
    case weather
    when 'Fog' then ''
    when /Clear/ then ' '
    when /Rain/ then ''
    when /Cloud/ then ''
    when /Snow/ then ''
    else
      ''
    end
  end

  # Private - Fetch information from OpenWeatherMap
  #
  # Returns Hash
  def contact_openweathermap
    JSON.parse(open(@api_url).read)
  end
end

# city = 'Zagreb'
city_id = '6618983'
out = Weather.new(city_id).show

puts "#{out}"