<?php

namespace App;

namespace Yajny\Member\Models;

use Illuminate\Database\Eloquent\Model;
use Yajny\EventsYj\Events\PayoutUpdated;
use Yajny\Member\BalanceTransactions\PayoutBalanceTransaction;
use Yajny\Member\Traits\MemberScopes;
use Yajny\Traits\HasCurrency;

class UserPayouts extends Model
{
    //
    use MemberScopes, HasCurrency;

    protected $table = 'user_payouts';
    protected $primaryKey = 'id';
    public $dateColumn = 'created_at';
    public $directTable = 'user_payouts';

    // protected $casts = [
    //     'api_response' => 'array'
    // ];

    protected $guarded = ['id', 'paid_at'];

    private $currencyFormatFields = [
        'local_amount'
    ];
    private $currencyFieldName = 'local_currency';

    public function method_info()
    {
        return $this->belongsTo('Yajny\Member\Models\PayoutMethods', 'method_code', 'code');
    }

    public function user()
    {
        return $this->belongsTo('Yajny\Member\Models\Member', 'user_id', 'user_id');
    }


    public static function boot()
    {
        parent::boot();

        static::creating(function ($payout) {
            $payout_id = substr(md5(microtime()), rand(0, 26), 10);
            $payout->payout_id = $payout_id;
        });

        static::created(function ($payout) {
            self::initiateBalanceTransaction($payout);
        });

        static::updated(function ($payout) {
            $changes = $payout->getChanges();
            if (isset($changes['amount']) || isset($changes['status'])) {
                self::initiateBalanceTransaction($payout);
                $userBalance=UsersBalance::where('user_id',$payout->user_id)->first();
                if ($changes['status']=="completed"){
                    $payout_cashback_amount=$userBalance->confirmed_cashback-$payout->amount;
                    // currencies SAR EGP KWD AED 
                    $payout_cashback_amount_egp=$userBalance->confirmed_cashback_egp-$payout->amount_egp;
                    $payout_cashback_amount_sar=$userBalance->confirmed_cashback_sar-$payout->amount_sar;
                    $payout_cashback_amount_aed=$userBalance->confirmed_cashback_aed-$payout->amount_aed;
                    $payout_cashback_amount_kwd=$userBalance->confirmed_cashback_kwd-$payout->amount_kwd;
                    if ($payout_cashback_amount<0){
                        $userBalance->payout_cashback_amount +=$userBalance->confirmed_cashback;
                        $userBalance->payout_bonus_amount -=$payout_cashback_amount;
                    }else{
                        $userBalance->payout_cashback_amount +=$payout->amount;
                    }
                    if ($payout_cashback_amount_egp<0){
                        $userBalance->payout_cashback_amount_egp +=$userBalance->confirmed_cashback_egp;
                        $userBalance->payout_bonus_amount_egp -=$payout_cashback_amount_egp;
                    }else{
                        $userBalance->payout_cashback_amount_egp +=$payout->amount_egp;
                    }
                    if ($payout_cashback_amount_sar<0){
                        $userBalance->payout_cashback_amount_sar +=$userBalance->confirmed_cashback_sar;
                        $userBalance->payout_bonus_amount_sar -=$payout_cashback_amount_sar;
                    }else{
                        $userBalance->payout_cashback_amount_sar +=$payout->amount_sar;
                    }
                    if ($payout_cashback_amount_kwd<0){
                        $userBalance->payout_cashback_amount_kwd +=$userBalance->confirmed_cashback_kwd;
                        $userBalance->payout_bonus_amount_kwd -=$payout_cashback_amount_kwd;
                    }else{
                        $userBalance->payout_cashback_amount_kwd +=$payout->amount_kwd;
                    }
                    if ($payout_cashback_amount_aed<0){
                        $userBalance->payout_cashback_amount_aed +=$userBalance->confirmed_cashback_aed;
                        $userBalance->payout_bonus_amount_aed -=$payout_cashback_amount_aed;
                    }else{
                        $userBalance->payout_cashback_amount_aed +=$payout->amount_aed;
                    }
                    $userBalance->save();
                }
                event(new PayoutUpdated($payout->user, $payout));
            }
        });
    }

    public static function initiateBalanceTransaction($payout)
    {
        $balanceTransaction = new PayoutBalanceTransaction(
            $payout->user_id,
            $payout->amount,
            $payout->id,
            $payout->status,
            $payout->updated_at
        );
        $balanceTransaction->saveTransaction();
    }
}
