import os
from typing import Dict, Optional

import forecastio
import pytz
from gpxpy.gpx import GPXRoutePoint

from fittrackee import appLog

API_KEY = os.getenv('WEATHER_API_KEY')


def get_weather(point: GPXRoutePoint) -> Optional[Dict]:
    if not API_KEY or API_KEY == '':
        return None
    try:
        point_time = pytz.utc.localize(point.time)
        forecast = forecastio.load_forecast(
            API_KEY,
            point.latitude,
            point.longitude,
            time=point_time,
            units='si',
        )
        weather = forecast.currently()
        return {
            'summary': weather.summary,
            'icon': weather.icon,
            'temperature': weather.temperature,
            'humidity': weather.humidity,
            'wind': weather.windSpeed,
        }
    except Exception as e:
        appLog.error(e)
        return None