import unittest

import pytest

from pypos.modules.sinkronisasi.services.transaction_export_legacy_defaults_service import (
    TransactionExportLegacyDefaultsService,
)

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


def _as_positive_int(value, default=0):
    try:
        parsed = int(float(value))
    except Exception:
        parsed = int(default or 0)
    return parsed if parsed > 0 else 0


class TransactionExportLegacyDefaultsServiceTests(unittest.TestCase):
    def test_build_defaults_with_context_and_config(self):
        out = TransactionExportLegacyDefaultsService.build_defaults(
            config={
                "export_default_print_oleh_nama": "kasir-a",
                "export_default_kontainer_size": "40ft",
                "export_default_ekspedisi_status": "ready",
                "toko_id": "1001",
            },
            device_context={
                "machine_id": "MID-01",
                "cabang_id": 101,
                "cabang_nama": "Cabang Utama",
                "cpu_info": "CPU-INFO",
                "com_info": "COM-INFO",
                "toko_id": "",
            },
            machine_fallback="MID-FALLBACK",
            as_positive_int_fn=_as_positive_int,
        )
        self.assertEqual(out["machine_id"], "MID-01")
        self.assertEqual(out["cabang_id"], 101)
        self.assertEqual(out["toko_id"], 1001)
        self.assertEqual(out["default_print_operator"], "kasir-a")
        self.assertEqual(out["default_kontainer_size"], "40ft")
        self.assertEqual(out["default_ekspedisi_status"], "ready")

    def test_build_defaults_fallback(self):
        out = TransactionExportLegacyDefaultsService.build_defaults(
            config={},
            device_context={},
            machine_fallback="MID-FALLBACK",
            as_positive_int_fn=_as_positive_int,
        )
        self.assertEqual(out["machine_id"], "MID-FALLBACK")
        self.assertEqual(out["cabang_id"], 0)
        self.assertEqual(out["default_print_operator"], "system")
        self.assertEqual(out["default_kontainer_size"], "none")
        self.assertEqual(out["default_ekspedisi_status"], "none")


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