import logging
from datetime import datetime

import pytz

from providers.staticdata.static_data_provider import StaticDataProvider


class LocalFileStaticDataProvider(StaticDataProvider):
    """Generic static reference data provider class for providers that fetch their data from a local file on startup."""

    def __init__(self, name, provider_config, path):
        super().__init__(name, provider_config)
        self._path = path
        self._stop = False

    def start(self):
        logging.debug("Loading " + self.name + " static reference data from file.")
        try:
            ok = self._load_data(self._path)
            if ok:
                self.status = "OK"
                self.last_update_time = datetime.now(pytz.UTC)
                logging.info("Updated static reference data for " + self.name)
            else:
                self.status = "Error"
                logging.error("Failed to load data for " + self.name)
        except Exception as e:
            self.status = "Error"
            logging.error("Exception in local file Static Data Provider (" + self.name + ")", e, exc_info=True)

    def stop(self):
        self._stop = True

    def _load_data(self, path):
        """Load data from the given file path. Return true if successful, false otherwise."""

        raise NotImplementedError("Subclasses must implement this method")
