import unittest

import pytest

from pypos.modules.dashboard.services.dashboard_window_ui_service import (
    DashboardWindowUiService,
)

# edited by glg
pytestmark = [pytest.mark.unit]


class DashboardWindowUiServiceTests(unittest.TestCase):
    def test_build_sync_status_payload(self):
        needs_sync_payload = DashboardWindowUiService.build_sync_status_payload(True)
        self.assertIn("Perlu Sinkronisasi", needs_sync_payload["text"])
        self.assertIn("orange", needs_sync_payload["style"])
        self.assertTrue(needs_sync_payload["show_button"])

        up_to_date_payload = DashboardWindowUiService.build_sync_status_payload(False)
        self.assertIn("Up-to-date", up_to_date_payload["text"])
        self.assertIn("green", up_to_date_payload["style"])
        self.assertFalse(up_to_date_payload["show_button"])

    def test_format_row_count_dan_elapsed_ms(self):
        self.assertEqual(DashboardWindowUiService.format_row_count("12500"), "12.500")
        self.assertEqual(DashboardWindowUiService.format_row_count("x"), "0")
        self.assertAlmostEqual(
            DashboardWindowUiService.elapsed_ms(10.0, now_value=10.125),
            125.0,
            places=2,
        )
        self.assertEqual(DashboardWindowUiService.elapsed_ms("bad", now_value=10.0), 0.0)

    def test_perf_log_builder_dan_level_decider(self):
        message = DashboardWindowUiService.build_perf_log_message(
            "navigate_to_page",
            231.4,
            extra="page=penjualan status=ok",
        )
        self.assertIn("[PERF] navigate_to_page elapsed_ms=231.4", message)
        self.assertTrue(DashboardWindowUiService.should_log_info(231.4, threshold_ms=220.0))
        self.assertFalse(DashboardWindowUiService.should_log_info(80.0, threshold_ms=220.0))
        self.assertTrue(DashboardWindowUiService.should_log_info(80.0, threshold_ms=220.0, always_info=True))

    def test_build_auto_sync_feedback_payload(self):
        self.assertIsNone(DashboardWindowUiService.build_auto_sync_feedback_payload(0))
        self.assertIsNone(DashboardWindowUiService.build_auto_sync_feedback_payload("x"))

        payload = DashboardWindowUiService.build_auto_sync_feedback_payload(12500)
        self.assertIsNotNone(payload)
        self.assertEqual(payload["rows"], 12500)
        self.assertIn("12.500", payload["status_text"])
        self.assertIn("12.500", payload["toast_text"])
        self.assertEqual(payload["toast_duration_ms"], 3600)
        self.assertEqual(payload["clear_delay_ms"], 9000)


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