from time import sleep

from pyhamtools.locator import locator_to_latlong

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


class LLOTA(FileDownloadSIGRefDataProvider):
    """SIG ref data provider for Lagos y Lagunas on the Air"""

    POLL_INTERVAL_DAYS = 7
    SIG = "LLOTA"
    DATA_URL = "https://llota.app/api/public/references"

    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 = []
        data = http_response.json()
        if isinstance(data, list):
            for ref in data:
                ref_id = ref["reference_code"]
                grid = str(ref["grid_locator"])
                ll = locator_to_latlong(grid)

                new_data.append(SIGRef(sig=self.SIG, id=ref_id, name=str(ref["name"]),
                                          ref_type="Lake",
                                          url="https://llota.app/list/ref/" + ref_id,
                                          grid=grid,
                                          latitude=ll[0],
                                          longitude=ll[1]))

                # 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
