# edited by glg
from pypos.modules.penjualan.services.pembayaran_input_service import PembayaranInputService


class _DummyLine:
    def __init__(self, text=""):
        self._text = str(text)

    def text(self):
        return self._text


class _DummySpin:
    def __init__(self, value=0):
        self._value = int(value)

    def value(self):
        return int(self._value)


class _DummyView:
    def __init__(self):
        self.input_total_credit = _DummyLine("23,400")
        self.input_total_harus_dibayar_credit = _DummyLine("20,000")
        self.input_total_debit = _DummyLine("23,400")
        self.input_total_harus_dibayar_debit = _DummyLine("20,000")
        self.diskon_tambahan_credit = _DummySpin(0)
        self.diskon_tambahan_debit = _DummySpin(0)
        self.diskon_tambahan_rp_credit = _DummyLine("3,400")
        self.diskon_tambahan_rp_debit = _DummyLine("3,400")
        self.input_no_kartu_credit = _DummyLine("")
        self.input_approval_credit = _DummyLine("")
        self.input_no_kartu_debit = _DummyLine("")
        self.input_approval_debit = _DummyLine("")
        self.radio_credit_cards = []
        self.radio_receive_accounts = []
        self.radio_debit_cards = []
        self.radio_receive_debit = []


def _parse_rupiah(text):
    return float(str(text or "").replace(",", "").replace(".", "") or 0)


def test_credit_payload_uses_total_harus_dibayar_for_jumlah_dibayar():
    service = PembayaranInputService()
    _, payload = service.build_result_payload(
        mode="credit",
        view=_DummyView(),
        parse_rupiah_callback=_parse_rupiah,
        selected_text_callback=lambda _buttons: "",
    )
    assert float(payload["jumlah_dibayar"]) == 20000.0
    assert float(payload["total_dibayar"]) == 20000.0


def test_debit_payload_uses_total_harus_dibayar_for_jumlah_dibayar():
    service = PembayaranInputService()
    _, payload = service.build_result_payload(
        mode="debit",
        view=_DummyView(),
        parse_rupiah_callback=_parse_rupiah,
        selected_text_callback=lambda _buttons: "",
    )
    assert float(payload["jumlah_dibayar"]) == 20000.0
    assert float(payload["total_dibayar"]) == 20000.0
