<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Yajny\Member\Models\Click;
use Yajny\Member\Models\Member;
use Yajny\Member\Models\Sale;
use Yajny\Member\Models\UserBonus;
use Yajny\Member\Models\UserNewBonus;
use Yajny\Member\Models\UserPayouts;
use Yajny\Member\Models\UserSales;
use Yajny\Member\Models\UsersBalance;

class recalculateBalanceScript extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'recalculate:run';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'recalculate user balance';

    /**
     * Execute the console command.
     *
     * @return void
     */
    public function handle()
    {

        $user_id=110551;
        $userBalance = UsersBalance::where('user_id', $user_id)->first();
        if (is_null($userBalance))
            $userBalance = new UsersBalance();
        $userBalance->user_id = $user_id;

        $calculateDate=$userBalance->calculate_from;

        $confirmedSale=UserSales::where([['user_id', $user_id], ['status', 'confirmed'], ['is_reset', false]])
            ->select(DB::raw("SUM(cashback_egp) as cashback_egp,SUM(cashback_sar) as cashback_sar ,SUM(cashback_aed) as cashback_aed ,SUM(cashback_kwd) as cashback_kwd, SUM(cashback) as cashback"));
        if ($calculateDate) $confirmedSale->where("created_at",">=",$calculateDate);
        $userSale =  $confirmedSale->first();
        $userSalesConfirmed = (double)$userSale->cashback;
        $userSalesConfirmedEGP = (double)$userSale->cashback_egp;
        $userSalesConfirmedSAR = (double)$userSale->cashback_sar;
        $userSalesConfirmedAED = (double)$userSale->cashback_aed;
        $userSalesConfirmedKWD = (double)$userSale->cashback_kwd;

        $pendingSale= UserSales::where([['user_id', $user_id], ['status', 'pending'], ['expiration_date', '>', now()], ['is_reset', false]])
            ->select(DB::raw("SUM(cashback_egp) as cashback_egp,SUM(cashback_sar) as cashback_sar ,SUM(cashback_aed) as cashback_aed ,SUM(cashback_kwd) as cashback_kwd, SUM(cashback) as cashback"));
        if ($calculateDate) $pendingSale->where("created_at",">=",$calculateDate);
        $userSale=$pendingSale->first();
        $userSalesPending = (double)$userSale->cashback;
        $userSalesPendingEGP = (double)$userSale->cashback_egp;
        $userSalesPendingSAR = (double)$userSale->cashback_sar;
        $userSalesPendingAED = (double)$userSale->cashback_aed;
        $userSalesPendingKWD = (double)$userSale->cashback_kwd;

        $expiredSale= UserSales::where([['user_id', $user_id], ['status', 'confirmed'], ['expiration_date', '<', now()], ['is_reset', false]])
            ->select(DB::raw("SUM(cashback_egp) as cashback_egp,SUM(cashback_sar) as cashback_sar ,SUM(cashback_aed) as cashback_aed ,SUM(cashback_kwd) as cashback_kwd, SUM(cashback) as cashback"));
        if ($calculateDate) $expiredSale->where("created_at",">=",$calculateDate);
        $userSale=  $expiredSale->first();
        $userSalesExpired = (double)$userSale->cashback;
        $userSalesExpiredEGP = (double)$userSale->cashback_egp;
        $userSalesExpiredSAR = (double)$userSale->cashback_sar;
        $userSalesExpiredAED = (double)$userSale->cashback_aed;
        $userSalesExpiredKWD = (double)$userSale->cashback_kwd;

        $confirmedBonus = UserBonus::where([['user_id', $user_id], ['status', 'confirmed'], ['is_reset', false]])
            ->select(DB::raw("SUM(amount_egp) as amount_egp,SUM(amount_sar) as amount_sar ,SUM(amount_aed) as amount_aed ,SUM(amount_kwd) as amount_kwd, SUM(amount) as amount"));
        if ($calculateDate) $confirmedBonus->where("awarded_on",">=",date("Y-m-d",strtotime($calculateDate )));
        $userBonus= $confirmedBonus->first();
        $userBonusConfirmed = (double)$userBonus->amount;
        $userBonusConfirmedEGP = (double)$userBonus->amount_egp;
        $userBonusConfirmedSAR = (double)$userBonus->amount_sar;
        $userBonusConfirmedAED = (double)$userBonus->amount_aed;
        $userBonusConfirmedKWD = (double)$userBonus->amount_kwd;

        $pendingBonus = UserBonus::where([['user_id', $user_id], ['status', 'pending'], ['expiration_date', '>', now()], ['is_reset', false]])
            ->select(DB::raw("SUM(amount_egp) as amount_egp,SUM(amount_sar) as amount_sar ,SUM(amount_aed) as amount_aed ,SUM(amount_kwd) as amount_kwd, SUM(amount) as amount"));
        if ($calculateDate) $pendingBonus->where("awarded_on",">=",date("Y-m-d",strtotime($calculateDate )));
        $userBonus=$pendingBonus->first();
        $userBonusPending = (double)$userBonus->amount;
        $userBonusPendingEGP = (double)$userBonus->amount_egp;
        $userBonusPendingSAR = (double)$userBonus->amount_sar;
        $userBonusPendingAED = (double)$userBonus->amount_aed;
        $userBonusPendingKWD = (double)$userBonus->amount_kwd;

        $expiredBonus = UserBonus::where([['user_id', $user_id], ['status', 'confirmed'], ['expiration_date', '<', now()], ['is_reset', false]])
            ->select(DB::raw("SUM(amount_egp) as amount_egp,SUM(amount_sar) as amount_sar ,SUM(amount_aed) as amount_aed ,SUM(amount_kwd) as amount_kwd, SUM(amount) as amount"));
        if ($calculateDate) $expiredBonus->where("awarded_on",">=",date("Y-m-d",strtotime($calculateDate )));
        $userBonus= $expiredBonus->first();
        $userBonusExpired = (double)$userBonus->amount;
        $userBonusExpiredEGP = (double)$userBonus->amount_egp;
        $userBonusExpiredSAR = (double)$userBonus->amount_sar;
        $userBonusExpiredAED = (double)$userBonus->amount_aed;
        $userBonusExpiredKWD = (double)$userBonus->amount_kwd;

        $confirmedNewBonus = UserNewBonus::where([['user_id', $user_id], ['status', 'confirmed'], ['is_reset', false]])
            ->select(DB::raw("SUM(amount_egp) as amount_egp,SUM(amount_sar) as amount_sar ,SUM(amount_aed) as amount_aed ,SUM(amount_kwd) as amount_kwd, SUM(amount) as amount"));
        if ($calculateDate) $confirmedNewBonus->where("created_at",">=",$calculateDate);
        $userNewBonus=$confirmedNewBonus->first();
        $userNewBonusConfirmed = (double)$userNewBonus->amount;
        $userNewBonusConfirmedEGP = (double)$userNewBonus->amount_egp;
        $userNewBonusConfirmedSAR = (double)$userNewBonus->amount_sar;
        $userNewBonusConfirmedAED = (double)$userNewBonus->amount_aed;
        $userNewBonusConfirmedKWD = (double)$userNewBonus->amount_kwd;

        $pendingNewBonus = UserNewBonus::where([['user_id', $user_id], ['status', 'pending'], ['expiration_date', '>', now()], ['is_reset', false]])
            ->select(DB::raw("SUM(amount_egp) as amount_egp,SUM(amount_sar) as amount_sar ,SUM(amount_aed) as amount_aed ,SUM(amount_kwd) as amount_kwd, SUM(amount) as amount"));
        if ($calculateDate) $pendingNewBonus->where("created_at",">=",$calculateDate);
        $userNewBonus=$pendingNewBonus->first();
        $userNewBonusPending = (double)$userNewBonus->amount;
        $userNewBonusPendingEGP = (double)$userNewBonus->amount_egp;
        $userNewBonusPendingSAR = (double)$userNewBonus->amount_sar;
        $userNewBonusPendingAED = (double)$userNewBonus->amount_aed;
        $userNewBonusPendingKWD = (double)$userNewBonus->amount_kwd;

        $expiredNewBonus = UserNewBonus::where([['user_id', $user_id], ['status', 'confirmed'], ['expiration_date', '<', now()], ['is_reset', false]])
            ->select(DB::raw("SUM(amount_egp) as amount_egp,SUM(amount_sar) as amount_sar ,SUM(amount_aed) as amount_aed ,SUM(amount_kwd) as amount_kwd, SUM(amount) as amount"));
        if ($calculateDate) $expiredNewBonus->where("created_at",">=",$calculateDate);
        $userNewBonus=$expiredNewBonus->first();
        $userNewBonusExpired = (double)$userNewBonus->amount;
        $userNewBonusExpiredEGP = (double)$userNewBonus->amount_egp;
        $userNewBonusExpiredSAR = (double)$userNewBonus->amount_sar;
        $userNewBonusExpiredAED = (double)$userNewBonus->amount_aed;
        $userNewBonusExpiredKWD = (double)$userNewBonus->amount_kwd;

        $confirmedPayout = UserPayouts::where([['user_id', $user_id], ['status', 'completed'], ['is_reset', false]])
            ->select(DB::raw("SUM(amount_egp) as amount_egp,SUM(amount_sar) as amount_sar ,SUM(amount_aed) as amount_aed ,SUM(amount_kwd) as amount_kwd, SUM(amount) as amount"));
        if ($calculateDate) $confirmedPayout->where("created_at",">=",$calculateDate);
        $userPayout=$confirmedPayout->first();
        $userPayoutConfirmed = (double)$userPayout->amount;
        $userPayoutConfirmedEGP = (double)$userPayout->amount_egp;
        $userPayoutConfirmedSAR = (double)$userPayout->amount_sar;
        $userPayoutConfirmedAED = (double)$userPayout->amount_aed;
        $userPayoutConfirmedKWD = (double)$userPayout->amount_kwd;

        $userBalance->confirmed_bonus = $userBonusConfirmed + $userNewBonusConfirmed;
        $userBalance->confirmed_bonus_egp = $userBonusConfirmedEGP + $userNewBonusConfirmedEGP;
        $userBalance->confirmed_bonus_sar = $userBonusConfirmedSAR + $userNewBonusConfirmedSAR;
        $userBalance->confirmed_bonus_aed = $userBonusConfirmedAED + $userNewBonusConfirmedAED;
        $userBalance->confirmed_bonus_kwd = $userBonusConfirmedKWD + $userNewBonusConfirmedKWD;

        $userBalance->pending_bonus = $userBonusPending + $userNewBonusPending;
        $userBalance->pending_bonus_egp = $userBonusPendingEGP + $userNewBonusPendingEGP;
        $userBalance->pending_bonus_sar = $userBonusPendingSAR + $userNewBonusPendingSAR;
        $userBalance->pending_bonus_aed = $userBonusPendingAED + $userNewBonusPendingAED;
        $userBalance->pending_bonus_kwd = $userBonusPendingKWD + $userNewBonusPendingKWD;

        $userBalance->confirmed_cashback = $userSalesConfirmed;
        $userBalance->confirmed_cashback_egp = $userSalesConfirmedEGP;
        $userBalance->confirmed_cashback_sar = $userSalesConfirmedSAR;
        $userBalance->confirmed_cashback_aed = $userSalesConfirmedAED;
        $userBalance->confirmed_cashback_kwd = $userSalesConfirmedKWD;

        $userBalance->pending_cashback = $userSalesPending;
        $userBalance->pending_cashback_egp = $userSalesPendingEGP;
        $userBalance->pending_cashback_sar = $userSalesPendingSAR;
        $userBalance->pending_cashback_aed = $userSalesPendingAED;
        $userBalance->pending_cashback_kwd = $userSalesPendingKWD;

        $userBalance->confirmed_amount = $userSalesConfirmed + $userBonusConfirmed + $userNewBonusConfirmed;
        $userBalance->confirmed_amount_egp = $userSalesConfirmedEGP + $userBonusConfirmedEGP + $userNewBonusConfirmedEGP;
        $userBalance->confirmed_amount_sar = $userSalesConfirmedSAR + $userBonusConfirmedSAR + $userNewBonusConfirmedSAR;
        $userBalance->confirmed_amount_aed = $userSalesConfirmedAED + $userBonusConfirmedAED + $userNewBonusConfirmedAED;
        $userBalance->confirmed_amount_kwd = $userSalesConfirmedKWD + $userBonusConfirmedKWD + $userNewBonusConfirmedKWD;

        $userBalance->pending_amount = $userSalesPending + $userBonusPending + $userNewBonusPending;
        $userBalance->pending_amount_egp = $userSalesPendingEGP + $userBonusPendingEGP + $userNewBonusPendingEGP;
        $userBalance->pending_amount_sar = $userSalesPendingSAR + $userBonusPendingSAR + $userNewBonusPendingSAR;
        $userBalance->pending_amount_aed = $userSalesPendingAED + $userBonusPendingAED + $userNewBonusPendingAED;
        $userBalance->pending_amount_kwd = $userSalesPendingKWD + $userBonusPendingKWD + $userNewBonusPendingKWD;

        $userBalance->expired_amount = $userSalesExpired + $userBonusExpired + $userNewBonusExpired;
        $userBalance->expired_amount_egp = $userSalesExpiredEGP + $userBonusExpiredEGP + $userNewBonusExpiredEGP;
        $userBalance->expired_amount_sar = $userSalesExpiredSAR + $userBonusExpiredSAR + $userNewBonusExpiredSAR;
        $userBalance->expired_amount_aed = $userSalesExpiredAED + $userBonusExpiredAED + $userNewBonusExpiredAED;
        $userBalance->expired_amount_kwd = $userSalesExpiredKWD + $userBonusExpiredKWD + $userNewBonusExpiredKWD;

        $userBalance->confirmed_payout_amount = $userPayoutConfirmed;
        $userBalance->confirmed_payout_amount_egp = $userPayoutConfirmedEGP;
        $userBalance->confirmed_payout_amount_sar = $userPayoutConfirmedSAR;
        $userBalance->confirmed_payout_amount_aed = $userPayoutConfirmedAED;
        $userBalance->confirmed_payout_amount_kwd = $userPayoutConfirmedKWD;

        $userBalance->available_expired_amount = $userBalance->expired_amount - $userBalance->confirmed_payout_amount;
        $userBalance->available_expired_amount_egp = $userBalance->expired_amount_egp - $userBalance->confirmed_payout_amount_egp;
        $userBalance->available_expired_amount_sar = $userBalance->expired_amount_sar - $userBalance->confirmed_payout_amount_sar;
        $userBalance->available_expired_amount_aed = $userBalance->expired_amount_aed - $userBalance->confirmed_payout_amount_aed;
        $userBalance->available_expired_amount_kwd = $userBalance->expired_amount_kwd - $userBalance->confirmed_payout_amount_kwd;
        if (($userBalance->available_expired_amount_sar < 0)) {
            $userBalance->available_expired_amount_sar = 0;
        }

        if (($userBalance->available_expired_amount_egp < 0)) {
            $userBalance->available_expired_amount_egp = 0;
        }

        if (($userBalance->available_expired_amount_aed < 0)) {
            $userBalance->available_expired_amount_aed = 0;
        }

        if (($userBalance->available_expired_amount_kwd < 0)) {
            $userBalance->available_expired_amount_kwd = 0;
        }


        if (($userBalance->confirmed_payout_amount - $userBalance->expired_amount) < 0) {
            $userBalance->available_amount = $userBalance->confirmed_amount - $userBalance->available_expired_amount - $userBalance->confirmed_payout_amount;
        } else {
            $userBalance->available_amount = $userBalance->confirmed_amount - $userBalance->confirmed_payout_amount;
        }

        if (($userBalance->confirmed_amount_sar - $userBalance->available_expired_amount_sar < 0)) {
            $userBalance->available_amount_sar = $userBalance->confirmed_amount_sar - $userBalance->available_expired_amount_sar - $userBalance->confirmed_payout_amount_sar;
        } else {
            $userBalance->available_amount_sar = $userBalance->confirmed_amount_sar - $userBalance->confirmed_payout_amount_sar;
        }

        if (($userBalance->confirmed_amount_egp - $userBalance->available_expired_amount_egp < 0)) {
            $userBalance->available_amount_egp = $userBalance->confirmed_amount_egp - $userBalance->available_expired_amount_egp - $userBalance->confirmed_payout_amount_egp;
        } else {
            $userBalance->available_amount_egp = $userBalance->confirmed_amount_egp - $userBalance->confirmed_payout_amount_egp;
        }

        if (($userBalance->confirmed_amount_aed - $userBalance->available_expired_amount_aed < 0)) {
            $userBalance->available_amount_aed = $userBalance->confirmed_amount_aed - $userBalance->available_expired_amount_aed - $userBalance->confirmed_payout_amount_aed;
        } else {
            $userBalance->available_amount_aed = $userBalance->confirmed_amount_aed - $userBalance->confirmed_payout_amount_aed;
        }

        if (($userBalance->confirmed_amount_kwd - $userBalance->available_expired_amount_kwd < 0)) {
            $userBalance->available_amount_kwd = $userBalance->confirmed_amount_kwd - $userBalance->available_expired_amount_kwd - $userBalance->confirmed_payout_amount_kwd;
        } else {
            $userBalance->available_amount_kwd = $userBalance->confirmed_amount_kwd - $userBalance->confirmed_payout_amount_kwd;
        }
        if ($userBalance->available_amount < 0) $userBalance->available_amount = 0;
        if ($userBalance->available_amount_egp < 0) $userBalance->available_amount_egp = 0;
        if ($userBalance->available_amount_sar < 0) $userBalance->available_amount_sar = 0;
        if ($userBalance->available_amount_aed < 0) $userBalance->available_amount_aed = 0;
        if ($userBalance->available_amount_kwd < 0) $userBalance->available_amount_kwd = 0;
//        if (($userBalance->confirmed_payout_amount - $userBalance->expired_amount) < 0) {
//            $userBalance->available_amount = $userBalance->confirmed_amount - $userBalance->available_expired_amount - $userBalance->confirmed_payout_amount;
//            $userBalance->available_amount_egp = $userBalance->confirmed_amount_egp - $userBalance->available_expired_amount_egp - $userBalance->confirmed_payout_amount_egp;
//            $userBalance->available_amount_sar = $userBalance->confirmed_amount_sar - $userBalance->available_expired_amount_sar - $userBalance->confirmed_payout_amount_sar;
//            $userBalance->available_amount_aed = $userBalance->confirmed_amount_aed - $userBalance->available_expired_amount_aed - $userBalance->confirmed_payout_amount_aed;
//            $userBalance->available_amount_kwd = $userBalance->confirmed_amount_kwd - $userBalance->available_expired_amount_kwd - $userBalance->confirmed_payout_amount_kwd;
//        } else {
//            $userBalance->available_amount = $userBalance->confirmed_amount - $userBalance->confirmed_payout_amount;
//            $userBalance->available_amount_egp = $userBalance->confirmed_amount_egp - $userBalance->confirmed_payout_amount_egp;
//            $userBalance->available_amount_sar = $userBalance->confirmed_amount_sar - $userBalance->confirmed_payout_amount_sar;
//            $userBalance->available_amount_aed = $userBalance->confirmed_amount_aed - $userBalance->confirmed_payout_amount_aed;
//            $userBalance->available_amount_kwd = $userBalance->confirmed_amount_kwd - $userBalance->confirmed_payout_amount_kwd;
//        }
        $userBalance->save();
        $user = Member::find($user_id);
        $user->confirmed_balance = $userBalance->available_amount;
        $user->save();
    }
}
