<?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 EWalletPayout extends BasePayMob
{
    public function __construct(UserPayouts $payout = null, UserPayoutMethods $method = null)
    {
        parent::__construct($payout, $method);
        $this->payoutMethod = PayoutMethods::where('code', 'e-wallet')->firstOrFail();
    }

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

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