from datetime import datetime

from pypos.modules.penjualan.models.pembayaran_model import InfoTransaksi


class TransaksiPaymentInfoService:
    # edited by glg
    def build_from_table(self, table_widget, parse_qty_callback, parse_rupiah_callback):
        rows = []
        safe_table = table_widget
        row_count = 0
        try:
            row_count = int(safe_table.rowCount()) if safe_table is not None else 0
        except (TypeError, ValueError, AttributeError):
            row_count = 0

        for row in range(max(0, row_count)):
            qty_item = safe_table.item(row, 4) if safe_table is not None else None
            subtotal_item = safe_table.item(row, 6) if safe_table is not None else None
            harga_item = safe_table.item(row, 3) if safe_table is not None else None
            rows.append(
                {
                    "qty_text": qty_item.text() if qty_item else "0",
                    "subtotal_text": subtotal_item.text() if subtotal_item else "0",
                    "harga_text": harga_item.text() if harga_item else "0",
                }
            )

        return self.build_from_rows(
            rows=rows,
            parse_qty_callback=parse_qty_callback,
            parse_rupiah_callback=parse_rupiah_callback,
        )

    def build_from_rows(self, rows, parse_qty_callback, parse_rupiah_callback):
        jenis_item = len(rows or [])
        total_qty = 0
        total_belanja = 0.0

        for row in rows or []:
            qty = max(0, int(parse_qty_callback(row.get("qty_text") or "0")))
            total_qty += qty

            subtotal = float(parse_rupiah_callback(row.get("subtotal_text") or "0") or 0)
            if subtotal <= 0:
                subtotal = float(parse_rupiah_callback(row.get("harga_text") or "0") or 0) * qty
            total_belanja += max(0.0, subtotal)

        return InfoTransaksi(
            tanggal=datetime.now().strftime("%Y-%m-%d"),
            jenis_item=jenis_item,
            total_qty=total_qty,
            total_belanja=total_belanja,
        )
