<table class="line-table" style="overflow: wrap" autosize="1">
    <!-- Table Header -->
    <thead>
    <tr>
        <th width="5%">No</th>
        <th class="stock-code" width="10%">Stock Code</th>
        <th class="description">Description</th>
        <th width="10%">Quantity</th>
        <th width="15%">Unit Price (RM)</th>
        <th width="10%">Total Amount<br>(RM)</th>
    </tr>
    </thead>
    <tbody>
    @php
        $subtotal = "0";
        $voucherDiscount = $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 2) : "0";
        $displayedSubtotal = 0;
        $currency_id = $transaction->owner->fix_currency_id;
    @endphp

    <?php

        use App\Classes\Modules\Bookings\Services\CalculatesBookingRefundAmount;
        use App\Classes\Modules\Bookings\Services\CalculatesBookingRefundServiceCharge;
        use App\Classes\ValueObjects\Constants\ApprovalStatus;
        use App\Classes\ValueObjects\Constants\TransactionType;

        $booking = $po_order_transaction->owner ?? $booking;
        $paymentSum = $booking->transactions()
            ->where('type', TransactionType::PAYMENT)
            ->where('status', ApprovalStatus::COMPLETED)
            ->get()
            ->sum(function ($transaction) {
                return round($transaction->amount, 2);
            });

        $totalPayment = 0;
        $average_currency_rate = $transaction->currency_rate;

        $paymentSumRefund = 0;
        if ($paymentSum){
            $average_currency_rate = $booking->transactions()
                ->where('type', TransactionType::PAYMENT)
                ->where('status', ApprovalStatus::COMPLETED)
                ->get()
                ->sum(function ($transaction) {
                    return $transaction->currency_rate;
                }) / $booking->transactions()
                ->where('type', TransactionType::PAYMENT)
                ->where('status', ApprovalStatus::COMPLETED)
                ->count();

            // $refundedAmount = (App()->make(CalculatesBookingRefundAmount::class))->execute($booking, 1);
            // $refundedServiceCharge = (App()->make(CalculatesBookingRefundServiceCharge::class))->execute($booking, 1);

            // $totalPayment = $paymentSum - $refundedAmount - $refundedServiceCharge;

            $totalPayment = $paymentSum;
        }
        else{
            $paymentSumRefund = $booking->transactions()
                ->where('type', TransactionType::PAYMENT)
                ->where('status', ApprovalStatus::REFUNDED)
                ->get()
                ->sum(function ($transaction) {
                    return round($transaction->amount, 2);
                });
        }
    ?>

    @if (!empty($po_order_transaction) && $po_order_transaction->transactionDetails)
        @foreach ($po_order_transaction->transactionDetails as $key => $transaction_detail)
            @php
                $exactUnitPrice = ($currency_id) === 1 ? $transaction_detail->price : bcdiv($transaction_detail->price, $average_currency_rate, 7);
                $displayUnitPrice = round($exactUnitPrice, 2);

            @endphp

            @continue($transaction_detail->product_name === 'Discount' && $displayUnitPrice < 0)

            @php
                $itemTotal = bcmul($exactUnitPrice, $transaction_detail->quantity, 5);
                $displayedItemTotal = round(bcmul($displayUnitPrice, $transaction_detail->quantity, 7), 2);
                $displayedSubtotal = bcadd($displayedSubtotal, $displayedItemTotal, 2);
                $subtotal = bcadd($subtotal, $itemTotal, 5);
            @endphp
            <tr>
                <td width="5%" class="center top">{{ $key + 1 }}</td>
                <td class="stock-code top" width="10%">{{ $transaction_detail->product_code }}</td>
                <td class="description">{{ $transaction_detail->product_name }}</td>
                <td width="10%" class="center top">{{ $transaction_detail->quantity }}</td>
                <td width="15%" class="center top">
                    {{ number_format($displayUnitPrice, 2) }}
                </td>
                <td width="20%" class="right top">
                    {{ number_format($displayedItemTotal, 2) }}
                </td>
            </tr>
        @endforeach
    @else
        @if ($paymentSumRefund)
            <tr>
                <td width="5%" class="center top"></td>
                <td class="stock-code top" width="10%"></td>
                <td class="description">CANCEL FULL ORDER</td>
                <td width="10%" class="center top"></td>
                <td width="15%" class="center top"></td>
                <td width="20%" class="right top"></td>
            </tr>
        @endif
    @endif
    </tbody>
    <tfoot>
    @php
        $subtotalWithDiscount = bcsub($subtotal, $voucherDiscount, 5);
        if (!$totalPayment) {
            $serviceCharge = $transaction->service_charge;
        }
        else {
            $serviceCharge = $booking->transactions()
                ->where('type', TransactionType::PAYMENT)
                ->where('status', ApprovalStatus::COMPLETED)
                ->get()
                ->sum(function ($transaction) {
                    return $transaction->service_charge;
                });
        }
        if ($paymentSumRefund && $displayedSubtotal === 0){
            $subtotal = bcsub($paymentSumRefund, $serviceCharge, 5);
            $displayedSubtotal = bcsub($paymentSumRefund, $serviceCharge, 2);
        }
    @endphp
    <tr class="subtotal">
        <td colspan="4"></td>
        <td class="right middle">Subtotal</td>
        <td class="right middle">{{ number_format($displayedSubtotal, 2) }}</td>
    </tr>
    <tr class="billingcharges">
        <td colspan="4"></td>
        <td class="right">Service Charges</td>
        <td class="right">{{ number_format($serviceCharge, 2) }}</td>
    </tr>

    @if($voucher_redemption)
        <tr class="voucher">
            <td colspan="4"></td>
            <td class="right middle">Voucher ({{ $voucher_redemption->voucher->code }})</td>
            <td class="right middle">{{ number_format($voucherDiscount, 2) }}</td>
        </tr>
    @endif

    @if($transaction->tax > 0)
        <tr class="billingcharges">
            <td colspan="4"></td>
            <td class="right">Tax</td>
            <td class="right">{{ number_format($transaction->tax, 2) }}</td>
        </tr>
    @endif
    @php
        $displayedSubtotal = is_numeric($displayedSubtotal) ? sprintf('%F', $displayedSubtotal) : '0';
        $serviceCharge = is_numeric($serviceCharge) ? sprintf('%F', $serviceCharge) : '0';
        $tax = is_numeric($transaction->tax) ? sprintf('%F', $transaction->tax) : '0';
        $voucherDiscount = is_numeric($voucherDiscount) ? sprintf('%F', $voucherDiscount) : '0';

        $displayedTotal = bcadd(
            bcadd(
                bcadd($displayedSubtotal, $serviceCharge, 5),
                $tax,
                5
            ),
            $voucherDiscount,
            5
        );

        $expectedTotal = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5);
        $discrepancy = bcsub($expectedTotal, $displayedTotal, 5);
        $total = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5);

        if ($totalPayment) {
            $expectedTotal = $totalPayment;
            $discrepancy = bcsub($expectedTotal, $displayedTotal, 5);
            $total = $totalPayment;
        }

        if($paymentSumRefund){
            $total = $paymentSumRefund;
        }
    @endphp
    <tr>
        <td colspan="4"></td>
        <td class="right middle">Adjustment</td>
        <td class="right middle">{{number_format($discrepancy, 5)}}</td>
    </tr>
    <tr>
        <td colspan="4"></td>
        <td class="right middle">Total</td>
        <td class="total right middle">
            {{ number_format($total, 2) }}
        </td>
    </tr>
    </tfoot>
</table>
