#!/usr/bin/env python

import datetime
import pytz
import sys
import time

from datetime import datetime as dt
from threading import Thread

from aman.com.DwdCrawler import DwdCrawler
import aman.config.Weather

class Weather(Thread):
    def __init__(self):
        Thread.__init__(self)

        self.nextUpdate = None
        self.lastUpdateTried = None
        self.stopThread = False
        self.provider = None

    def acquire(self, config : aman.config.Weather.Weather):
        self.nextUpdate = dt.utcfromtimestamp(int(time.time()))
        self.lastUpdateTried = None
        self.stopThread = False
        self.provider = None

        if 'DWD' == config.Provider.upper():
            self.provider = DwdCrawler()
        else:
            sys.stderr.write('Invalid or unknown weather-provider defined')
            sys.exit(-1)

        self.start()

    def release(self):
        self.stopThread = True
        self.join()

    def currentClock():
        clock = dt.utcfromtimestamp(int(time.time()))
        clock = datetime.datetime(
            year = clock.year,
            month = clock.month,
            day = clock.day,
            hour = clock.hour,
            minute = clock.minute,
            second = clock.second,
            tzinfo = pytz.UTC
        )
        return clock

    def run(self):
        while False == self.stopThread and None != self.provider:
            now = Weather.currentClock()

            # check if an update is required
            if None != self.provider.updateTime and self.provider.updateTime > now:
                time.sleep(1)
                continue

            if None == self.lastUpdateTried or self.lastUpdateTried <= now:
                if True == self.provider.receiveWindData():
                    self.nextUpdate = self.provider.updateTime