import unittest
from datetime import date

from app.utils import apply_discount, clean_name, format_money, normalize_phone, parse_time, parse_visit_date


class UtilsTest(unittest.TestCase):
    def test_phone(self) -> None:
        self.assertEqual(normalize_phone("0671234567"), "+380671234567")
        self.assertEqual(normalize_phone("+38 (067) 123-45-67"), "+380671234567")
        self.assertIsNone(normalize_phone("123"))

    def test_name(self) -> None:
        self.assertEqual(clean_name("  Олена   Коваль "), "Олена Коваль")
        self.assertEqual(clean_name("Мар'ян Коваль"), "Мар'ян Коваль")
        self.assertIsNone(clean_name("Олена"))

    def test_date(self) -> None:
        today = date(2026, 9, 25)
        self.assertEqual(parse_visit_date("25.09.2026", today=today), date(2026, 9, 25))
        self.assertIsNone(parse_visit_date("01.01.2020", today=today))
        self.assertEqual(parse_visit_date("20.10", today=today), date(2026, 10, 20))
        self.assertIsNone(parse_visit_date("01.01", today=today))

    def test_time_money_discount(self) -> None:
        self.assertEqual(parse_time("9.30"), "09:30")
        self.assertIsNone(parse_time("25:00"))
        self.assertEqual(format_money(18900), "189 грн")
        self.assertEqual(format_money(17010), "170,10 грн")
        self.assertEqual(apply_discount(18900, 10), (1890, 17010))


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