<?php

namespace App\Http\Controllers\Actions;

use App\Jobs\ProcessPayPal;
use App\Jobs\UpdatePayPalStatus;
use Illuminate\Routing\Controller as BaseController;
use Yajny\EventsYj\Events\ProcessPayoutEvent;
use Yajny\Member\Entities\Payouts\PayoutStatusUtil;
use Yajny\Member\Models\Member;
use Yajny\Member\Models\PayoutMethods;
use Yajny\Member\Models\UserPayoutMethods;
use Yajny\Member\Models\UserPayouts;

class PaymentController extends BaseController{

    public static function processPayPal($request)
    {
        $payoutId = $request->id;
        $status = $request->status;

        if($status=='created' || $status=='declined'){

            $payout = UserPayouts::find($payoutId);

            if(!$payout) return;

            $user = Member::find($request->user_id);
            if(!$user) return;

            $method = PayoutMethods::where('code',$request->method_code )->first();
            if(!$method) return;

            ProcessPayPal::dispatch($user,$payout)->onQueue('admin');

            UpdatePayPalStatus::dispatch($user,$payout, $method->status_mapping )
                ->delay(now()->addMinutes(1))->onQueue('admin');

        }
    }

    public function processPayout($payoutId)
    {
        $payout = UserPayouts::findOrFail($payoutId);
        $status = $payout->status;
        if (in_array($status, ['created', 'declined', 'failed'])) {
            $method = UserPayoutMethods::where('method_code',$payout->method_code)
                ->where('account', $payout->account)
                ->firstOrFail();
            $payout->status = PayoutStatusUtil::PROCESSING;
            $payout->save();
            event(new ProcessPayoutEvent($payout, $method));
            return redirect()->back();
        }
        return redirect()->back();
    }
}