import tempfile
import unittest
from pathlib import Path
from unittest.mock import patch
from archweather import core

class CoreTests(unittest.TestCase):
    def test_compass(self):
        self.assertEqual(core.compass(270), "W")
        self.assertEqual(core.compass(45), "NO")
    def test_coordinates(self):
        self.assertEqual(core.find_places("52.37,4.90")[0]["longitude"],4.90)
    def test_search_mock(self):
        with patch.object(core,"http_json",return_value={"results":[{"name":"Delft"}]}):
            self.assertEqual(core.find_places("Delft")[0]["name"],"Delft")
    def test_cache_and_export(self):
        with tempfile.TemporaryDirectory() as tmp:
            with patch.object(core,"CACHE_DIR",Path(tmp)/"cache"), patch.object(core,"DATA_DIR",Path(tmp)/"data"):
                place={"name":"Test","latitude":52,"longitude":4}
                data={"current":{"temperature_2m":12,"wind_speed_10m":15}}
                core.cache_save(place,data)
                self.assertEqual(core.cache_load(place)["data"],data)
                core.save_observation(place,data)
                self.assertEqual(core.export_history(Path(tmp)/"output.json","json"),1)
                self.assertTrue((Path(tmp)/"output.json").exists())
    def test_warnings(self):
        data={"current":{"temperature_2m":-2,"wind_gusts_10m":80}}
        self.assertIn("Vorst",core.warnings(data,core.DEFAULTS))
        self.assertIn("Harde windstoten",core.warnings(data,core.DEFAULTS))

if __name__ == "__main__": unittest.main()
