import logging

from pyhamtools import LookupLib, Callinfo

from core.data_store import DATA_STORE
from core.utils import get_callsign_object_from_pyhamtools_callinfo
from data.callsign import Callsign
from providers.callsigndata.file_download_callsign_data_provider import FileDownloadCallsignDataProvider


class CountryFiles(FileDownloadCallsignDataProvider):
    """Callsign data provider for Country-files.com, which provides basic callsign to DXCC entity mapping."""

    POLL_INTERVAL_DAYS = 30
    DATA_URL = "https://www.country-files.com/cty/cty.plist"
    CACHE_PATH = "cache/cty.plist"
    _callinfo = None

    def __init__(self, provider_config):
        super().__init__("CountryFiles.com", provider_config, self.DATA_URL, self.CACHE_PATH, self.POLL_INTERVAL_DAYS,
                         DATA_STORE.callsign_data_countryfiles)

    def _handle_file(self, path):
        try:
            lookuplib = LookupLib(lookuptype="countryfile", filename=path)
            self._callinfo = Callinfo(lookuplib)
            return True

        except Exception as e:
            logging.error("Exception when loading Country Files cty.plist.", e, exc_info=True)
            return False

    def _perform_new_lookup(self, callsign, lookup_credentials):
        callsign_data = Callsign(call=callsign)

        try:
            if self._callinfo:
                callsign_data = get_callsign_object_from_pyhamtools_callinfo(callsign, self._callinfo)
                self.status = "OK"
                self.lookup_count += 1
            else:
                return None

        except Exception as e:
            self.status = "Error"
            logging.error("Exception when looking up data from Country file", e, exc_info=True)

        return callsign_data
