# edited by glg
from pypos.modules.penjualan.controllers.settlement_controller import SettlementController


class _ViewStub:
    def __init__(self):
        self.errors = []
        self.infos = []

    def tampilkan_error(self, message):
        self.errors.append(str(message))

    def tampilkan_pesan(self, message):
        self.infos.append(str(message))


class _HistoryReprintServiceStub:
    def __init__(self, result):
        self.result = dict(result or {})
        self.calls = []

    def execute(self, history_data):
        self.calls.append(dict(history_data or {}))
        return dict(self.result)


def _build_controller(service_result):
    ctrl = SettlementController.__new__(SettlementController)
    ctrl.view = _ViewStub()
    ctrl.history_reprint_service = _HistoryReprintServiceStub(service_result)
    return ctrl


def test_controller_history_reprint_show_info_when_success():
    ctrl = _build_controller({"ok": True, "message": "ok"})
    history_data = {"data_transaksi_id": "[1]"}

    ok = ctrl.print_ulang_settlement_history(history_data)

    assert ok is True
    assert ctrl.history_reprint_service.calls
    assert ctrl.view.infos == ["ok"]
    assert not ctrl.view.errors


def test_controller_history_reprint_show_error_when_failed():
    ctrl = _build_controller({"ok": False, "message": "gagal"})
    history_data = {"data_transaksi_id": "[1]"}

    ok = ctrl.print_ulang_settlement_history(history_data)

    assert ok is False
    assert ctrl.history_reprint_service.calls
    assert ctrl.view.errors == ["gagal"]
