# edited by glg

from pypos.modules.penjualan.views.transaksi_penjualan_view import TransaksiPenjualanView


def test_extract_missing_harga_context_mengambil_barcode():
    view = TransaksiPenjualanView.__new__(TransaksiPenjualanView)
    message = "Barang 'Produk A (barcode: 6957754300822)' ditemukan, tetapi harganya belum diatur."
    out = view._extract_missing_harga_context(message)
    assert out["lookup"] == "6957754300822"
    assert out["barcode_only"] is True


def test_is_missing_harga_warning_true_untuk_pesan_harga_belum_diatur():
    view = TransaksiPenjualanView.__new__(TransaksiPenjualanView)
    assert view._is_missing_harga_warning(
        "Barang Tidak Dapat Diproses",
        "Produk terdeteksi tetapi harganya belum diatur di POS.",
    )


def test_is_missing_harga_warning_false_untuk_pesan_lain():
    view = TransaksiPenjualanView.__new__(TransaksiPenjualanView)
    assert not view._is_missing_harga_warning(
        "Info",
        "Transaksi berhasil disimpan.",
    )


# edited by glg
def test_reset_form_memanggil_controller_handler_jika_tersedia():
    view = TransaksiPenjualanView.__new__(TransaksiPenjualanView)
    called = {"controller": 0, "ui": 0}

    class _Controller:
        def reset_form_transaksi(self, target_view):
            _ = target_view
            called["controller"] += 1

    view.controller = _Controller()
    view._reset_form_ui_only = lambda: called.__setitem__("ui", called["ui"] + 1)

    view.reset_form()
    assert called["controller"] == 1
    assert called["ui"] == 0


# edited by glg
def test_reset_form_fallback_ke_ui_only_jika_handler_controller_tidak_ada():
    view = TransaksiPenjualanView.__new__(TransaksiPenjualanView)
    called = {"ui": 0}
    view.controller = object()
    view._reset_form_ui_only = lambda: called.__setitem__("ui", called["ui"] + 1)

    view.reset_form()
    assert called["ui"] == 1
