class PembayaranSplitService:
    def __init__(self):
        self._payments = []
        self._remaining_amount = 0.0

    def reset(self):
        self._payments = []
        self._remaining_amount = 0.0

    def has_remaining(self):
        return self._remaining_amount > 0

    def get_remaining_amount(self):
        return float(self._remaining_amount or 0.0)

    def get_mode_name(self, mode):
        if mode == "tunai":
            return "Tunai"
        if mode == "credit":
            return "Credit Card"
        return "Debit Card"

    def read_amounts(self, mode, view, parse_rupiah):
        if mode == "tunai":
            jumlah = float(parse_rupiah(view.input_bayar_tunai.text()))
            total = float(parse_rupiah(view.input_total_harus_dibayar_tunai.text()))
        elif mode == "credit":
            jumlah = float(parse_rupiah(view.input_total_harus_dibayar_credit.text()))
            total = float(parse_rupiah(view.input_total_harus_dibayar_credit.text()))
        else:
            jumlah = float(parse_rupiah(view.input_total_harus_dibayar_debit.text()))
            total = float(parse_rupiah(view.input_total_harus_dibayar_debit.text()))
        if self.has_remaining():
            total = self.get_remaining_amount()
        return jumlah, total

    def add_partial_payment(self, payment_result, total_dibayar, jumlah_dibayar):
        if payment_result is None:
            return False
        self._payments.append(payment_result)
        self._remaining_amount = max(0.0, float(total_dibayar or 0) - float(jumlah_dibayar or 0))
        return True

    def merge_final_result(self, result):
        if not self._payments:
            return result
        combined = list(self._payments)
        combined.append(result)
        return combined
