<?php

namespace App\Classes\Modules\Bookings\Services;


use App\Classes\Modules\Bookings\DataTransferObjects\CalculationObject;
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyConversionObject;
use App\Http\Resources\BankResource;
use App\Models\Bank;
use Carbon\Carbon;
use Carbon\CarbonInterval;

class GeneratesBookingQuotation
{

    public function execute(CalculationObject $calculationObject, ?int $paymentAttemptLimit = 0, ?CurrencyConversionObject $currencyConversionObject = null){
        $date = Carbon::now();
        $days = $date->diffInDays($date->copy()->addMinutes($paymentAttemptLimit));
        $hours = $date->diffInHours($date->copy()->addMinutes($paymentAttemptLimit)->subDays($days)) ;
        $minutes = $date->diffInMinutes($date->copy()->addMinutes($paymentAttemptLimit)->subDays($days)->subHours($hours));

        $receive_date = $currencyConversionObject ? Carbon::now()->endOfDay()->addWeekdays($currencyConversionObject->getServiceId() === 3 ? 3 : 1)->timezone('Asia/Singapore')->format('4:00 \P\M, jS M, Y \G\M\T T') : null;

        return [
            'bank' => new BankResource(Bank::find($calculationObject->getConfigurations()->getBankId())),
            'rate' => $calculationObject->getConfigurations()->getRate(),
            'local_total' => $calculationObject->getLocalTotal(),
            'foreign_total' => $calculationObject->getForeignTotal(),
            'conversion_amount' => $calculationObject->getConversionTotal(),
            'service_charge' => $calculationObject->getServiceCharge(),
            'tax_total' => $calculationObject->getTax(),
            'tax' => $calculationObject->getConfigurations()->getTax(),
            'sub_total' => $calculationObject->getSubTotal(),
            'total' => $calculationObject->getTotal(),
            'date' => Carbon::now()->timezone('Asia/Singapore')->format('h:i a, jS M, Y \G\M\T T'),
            'receive_date' => $receive_date,
            'payment_attempt_limit' => CarbonInterval::days($days)->hours($hours)->minutes($minutes)->forHumans(),
            'voucher_discount_amount' => $calculationObject->getVoucherDiscountAmount(),
            'voucher_code' => $calculationObject->getVoucherCode(),
        ];
    }
}
