do

local BASE_URL = "http://api.openweathermap.org/data/2.5/forecast/daily"

local function get_condition_symbol(weather, n)
  if weather.list[n].weather[1].main == 'Clear' then
	return ' ☀'
  elseif weather.list[n].weather[1].main == 'Clouds' then
	return ' ☁☁'
  elseif weather.list[n].weather[1].main == 'Rain' then
    return ' ☔'
  elseif weather.list[n].weather[1].main == 'Thunderstorm' then
	return ' ☔☔☔☔'
  elseif weather.list[n].weather[1].main == 'Snow' then
	return ' ❄️'
  else
    return ''
  end
end

local function get_temp(weather, n)
  local day = string.gsub(round(weather.list[n].temp.day, 1), "%.", "%,")
  local night = string.gsub(round(weather.list[n].temp.night, 1), "%.", "%,")
  local condition = weather.list[n].weather[1].description
  return '☀️ '..day..'°C | 🌙 '..night..'°C | '..condition
end

local function get_forecast(location, days)
  print("Bekomme Wettervorhersage für ", location)
  local location = string.gsub(location," ","+")
  local url = BASE_URL
  local apikey = cred_data.owm_apikey
  local url = url..'?q='..location
  local url = url..'&lang=de&units=metric&cnt='..days..'&APPID='..apikey

  local b, c, h = http.request(url)
  if c ~= 200 then return nil end

  local weather = json:decode(b)
  local city = weather.city.name
  if weather.city.country == "" then
    country = ''
  else
    country = ' ('..weather.city.country..')'
  end
  local header = 'Vorhersage für '..city..country..':\n'
  
  local text = 'Heute: '..get_temp(weather, 1)..get_condition_symbol(weather, 1)
  
  if days > 1 then
    text = text..'\nMorgen: '..get_temp(weather, 2)..get_condition_symbol(weather, 2)
  end
  if days > 2 then
    text = text..'\nÜbermorgen: '..get_temp(weather, 3)..get_condition_symbol(weather, 3)
  end
  
  if days > 3 then
    for day in pairs(weather.list) do
	  if day > 3 then 
	    local actual_day = day-1
        text = text..'\n'..actual_day..' Tage: '..get_temp(weather, day)..get_condition_symbol(weather, day)
	  end
    end
  end
  
  return header..text
end

local function run(msg, matches)
  local user_id = msg.from.id
  local city = get_location(user_id)
  if not city then city = 'Berlin' end
  
  if tonumber(matches[1]) then
    days = matches[1]+1
  else
    days = 4
  end

  if matches[2] then
    days = matches[1]+1
    city = matches[2]
  end
  
  if not tonumber(matches[1]) and matches[1] ~= '!/orecast' then
    city = matches[1]
  end
  
  if days > 17 then
    return 'Wettervorhersagen gehen nur von 1-16 Tagen!'
  end

  local text = get_forecast(city, days)
  if not text then
    text = 'Konnte die Wettervorhersage für diese Stadt nicht bekommen.'
  end
  return text
end

return {
  description = "Wettervorhersage für deinen oder einen gewählten Ort", 
  usage = {
    "/forecast: Wettervorhersage für deine Stadt (!location set [Ort])",
	"/forecast [0-16]: Wettervorhersage für X Tage für deine Stadt (!location set [Ort])",
    "/forecast (Stadt): Wettervorhersage für diese Stadt",
	"/forecast [0-16] (Stadt): Wettervorhersage für X Tage für diese Stadt"
  },
  patterns = {
    "^/forecast$",
	"^/forecast (%d+) (.*)$",
	"^/forecast (%d+)",
	"^/forecast (.*)$"
  }, 
  run = run 
}

end