# edited by glg
class LoadTransaksiApplyService:
    """
    Use-case service untuk merangkai payload load transaksi lokal ke form penjualan.
    """

    @staticmethod
    def _as_positive_int(value, default=0):
        try:
            parsed = int(value)
        except (TypeError, ValueError):
            return int(default or 0)
        return parsed if parsed > 0 else int(default or 0)

    def build_local_load_payload(
        self,
        *,
        transaksi_id,
        header,
        detail_rows,
        raw_transaksi,
        parse_header,
        build_preorder_payload,
    ):
        normalized_id = self._as_positive_int(transaksi_id, 0)
        if normalized_id <= 0:
            return {"ok": False, "reason": "invalid_transaksi_id"}

        parsed_header = parse_header(header)
        if parsed_header is None:
            return {"ok": False, "reason": "invalid_header"}

        customers_id, customers_nama, diskon, ppn, total_harga = parsed_header
        preorder_payload = build_preorder_payload(
            raw_transaksi=raw_transaksi,
            detail_rows=detail_rows or [],
            transaksi_id=normalized_id,
        )
        return {
            "ok": True,
            "transaksi_id": normalized_id,
            "detail_rows": detail_rows or [],
            "customers_id": customers_id,
            "customers_nama": customers_nama,
            "diskon": diskon,
            "ppn": ppn,
            "total_harga": total_harga,
            "preorder_payload": preorder_payload,
        }
