import unittest

from pypos.modules.printer.services.settlement_print_service import SettlementPrintService


# edited by glg
class SettlementPrintServiceTests(unittest.TestCase):
    def setUp(self):
        self.service = SettlementPrintService()

    def test_build_html_memuat_elemen_wajib(self):
        html = self.service._build_html(
            counter="ST-20260306-001",
            kasir_nama="kasir glg",
            shift="1",
            total_dict={"Tunai": 10000},
            transaksi_list=[{"id": 8, "total": 10000, "metode": "Tunai"}],
            layout={"title": "Settlement Test", "font_family": "DejaVu Sans Mono", "font_size_pt": 9},
            receipt_setting={},
        )

        self.assertIn("Settlement ID: ST-20260306-001", html)
        self.assertIn("kasir glg", html)
        self.assertIn("Rp 10.000", html)
        self.assertIn("Daftar Transaksi", html)

    def test_build_html_mendukung_total_dict_bertingkat(self):
        html = self.service._build_html(
            counter="ST-20260306-002",
            kasir_nama="kasir glg",
            shift="2",
            total_dict={"tunai": 15000, "edc": {"BCA": 25000}},
            transaksi_list=[],
            layout={"title": "Settlement Test", "font_family": "DejaVu Sans Mono", "font_size_pt": 9},
            receipt_setting={},
        )

        self.assertIn("tunai", html.lower())
        self.assertIn("edc - bca", html.lower())
        self.assertIn("Rp 40.000", html)

    def test_rekap_kas_harus_berbasis_tunai_saja(self):
        # edited by glg
        html = self.service._build_html(
            counter="ST-20260331-001",
            kasir_nama="kasir2bpj",
            shift="-",
            total_dict={"Tunai": 283000, "Non Tunai": 20000},
            transaksi_list=[],
            total_disetor=280000,
            layout={"title": "Settlement Test", "font_family": "DejaVu Sans Mono", "font_size_pt": 9},
            receipt_setting={},
        )

        self.assertIn("TOTAL</td><td class='right'>Rp 303.000", html)
        self.assertIn("Total Harus</td><td class='right'>Rp 283.000", html)
        self.assertIn("Selisih</td><td class='right'>Rp -3.000", html)
        self.assertIn("Status Setoran:</span> Kurang Setor", html)


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