class TransaksiPaymentStateService:
    # edited by glg
    def has_pending_settlement(self, rows):
        return len(rows or []) > 0

    # edited by glg
    def detect_other_kasir(self, rows, current_kasir):
        kasir_now = str(current_kasir or "").strip()
        if not kasir_now:
            return False
        for row in rows or []:
            if not isinstance(row, dict):
                continue
            kasir = str(row.get("kasir") or "").strip()
            if kasir and kasir != kasir_now:
                return True
        return False

    def can_open_payment_dialog(self, row_count, is_processing):
        return int(row_count or 0) > 0 and not bool(is_processing)

    def start_payment_process(self, view):
        if hasattr(view, "_sedang_proses_pembayaran"):
            view._sedang_proses_pembayaran = True
        if hasattr(view, "button_simpan") and view.button_simpan is not None:
            view.button_simpan.setEnabled(False)

    def finish_payment_process(self, view, success):
        if hasattr(view, "_sedang_proses_pembayaran"):
            view._sedang_proses_pembayaran = False
        if not success and hasattr(view, "button_simpan") and view.button_simpan is not None:
            view.button_simpan.setEnabled(True)

    def build_settlement_warning_message(self, has_other_kasir):
        if has_other_kasir:
            return (
                "Ada transaksi penjualan dari kasir lain yang belum diselesaikan.\n"
                "Silakan lakukan settlement terlebih dahulu sebelum melanjutkan."
            )
        return "Ada transaksi penjualan yang belum diselesaikan. Silakan selesaikan terlebih dahulu."
