from time import sleep

from data.sig_ref import SIGRef
from providers.sigrefdata.file_download_sig_ref_data_provider import FileDownloadSIGRefDataProvider


class WOTA(FileDownloadSIGRefDataProvider):
    """SIG ref data provider for Wainwrights on the Air"""

    POLL_INTERVAL_DAYS = 365
    SIG = "WOTA"
    DATA_URL = "https://www.wota.org.uk/mapping/data/summits.json"

    def __init__(self, provider_config):
        super().__init__(self.SIG, provider_config, self.DATA_URL, self.POLL_INTERVAL_DAYS)

    def _http_response_to_data(self, http_response):
        new_data = []
        for feature in http_response.json().get("features", []):
            ref_id = feature["properties"]["wotaId"]
            # Fudge WOTA URLs. Outlying fell (LDO) URLs don't match their ID numbers but require 214 to be
            # added to them
            url = "https://www.wota.org.uk/MM_" + ref_id
            if ref_id.upper().startswith("LDO-"):
                number = int(ref_id.upper().replace("LDO-", ""))
                url = "https://www.wota.org.uk/MM_LDO-" + str(number + 214)

            new_data.append(SIGRef(sig=self.SIG, id=ref_id, name=feature["properties"]["title"], url=url,
                                      ref_type="Summit",
                                      grid=feature["properties"]["qthLocator"],
                                      latitude=feature["geometry"]["coordinates"][1],
                                      longitude=feature["geometry"]["coordinates"][0],
                                      altitude=feature["properties"]["height"]))

            # Bail out if a stop has been requested, i.e. the program is shutting down - no need to parse the rest of
            # the data in this case
            if self._stop_event.is_set():
                break

            # Very short pause. This will extend the time to handle sig refs by a few seconds but will ensure some time
            # is available for other threads e.g. the web server.
            sleep(0.001)

        return new_data
