#!/usr/bin/python3

# Author: Benjamin Drung <bdrung@ubuntu.com>

# pylint: disable=invalid-name
# pylint: enable=invalid-name

"""Test timezones using the Python icu module."""

import datetime
import sys
import unittest

import icu


class TestICU(unittest.TestCase):
    """Test timezones using the Python icu module."""

    def _hours(self, delta: datetime.timedelta) -> int:
        total_seconds = int(delta.total_seconds())
        self.assertEqual(total_seconds % 3600, 0)
        return total_seconds // 3600

    def test_2023a(self) -> None:
        """Test Egypt uses DST again from 2023a release."""
        tzinfo = icu.ICUtzinfo(icu.TimeZone.createTimeZone("Africa/Cairo"))
        date = datetime.datetime(2023, 4, 28, 12, 0)
        self.assertEqual(self._hours(tzinfo.utcoffset(date)), 3)

    def test_2024a(self) -> None:
        """Test 2024a release: Kazakhstan being on +05 from 2024-03-01 on."""
        tzinfo = icu.ICUtzinfo(icu.TimeZone.createTimeZone("Asia/Almaty"))
        date = datetime.datetime(2024, 3, 2)
        self.assertEqual(self._hours(tzinfo.utcoffset(date)), 5)


def main() -> None:
    """Run unit tests in verbose mode."""
    argv = sys.argv.copy()
    argv.insert(1, "-v")
    unittest.main(argv=argv)


if __name__ == "__main__":
    main()
