<?php

namespace Yajny\EventsYj\Library\PayMob;

use Illuminate\Support\Facades\Log;
use Yajny\Member\Entities\Payouts\PayoutStatusUtil;
use Yajny\Member\Models\PayoutMethods;
use Yajny\Member\Models\UserPayoutMethods;
use Yajny\Member\Models\UserPayouts;

class AmanPayout extends BasePayMob
{
    public function __construct(UserPayouts $payout = null, UserPayoutMethods $method = null)
    {
        parent::__construct($payout, $method);
        $this->payoutMethod = PayoutMethods::where('code', 'aman')->firstOrFail();
    }

    function getPayMobDisburseBody()
    {
        return [
            'amount' => $this->payout->local_final_amount,
            'issuer' => 'aman',
            'msisdn' => $this->payout->account,
            'first_name' => $this->method->payout_data->first_name,
            'last_name' => $this->method->payout_data->last_name,
            'email' => $this->method->payout_data->email
        ];
    }

    function updateStatus($transaction)
    {
        $currentStatus = $this->payout->status;
        $this->payout->api_status = $transaction->disbursement_status;
        if (isset($transaction->disbursement_status) && $transaction->disbursement_status == 'successful') {
            if (isset($transaction->aman_cashing_details->is_paid) && $transaction->aman_cashing_details->is_paid) {
                $this->payout->status = PayoutStatusUtil::COMPLETED;
                $this->payout->paid_at = date('Y-m-d');
            } else {
                $this->payout->status = PayoutStatusUtil::PROCESSING;
            }
        } else {
            $this->payout->status = $this->payoutMethod->status_mapping[$transaction->disbursement_status] ?? PayoutStatusUtil::FAILED;
        }
        if (!isset($this->payoutMethod->status_mapping[$transaction->disbursement_status])) {
            Log::error('Unexpected disbursement_status', compact('transaction'));
        }
        return $currentStatus != $this->payout->status;
    }
}
