<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Yajny\Member\BalanceTransactions\BonusBalanceTransaction;
use Yajny\Member\Models\Member;
use Yajny\Member\Models\NewBonusType;
use Yajny\Member\Models\ReferralCashbackBonus;
use Yajny\Member\Models\UserNewBonus;

class ReferralBonus extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'referral_bonus';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'User Referral bonus';

    /**
     * Execute the console command.
     *
     * @return void
     */
    public function handle()
    {
        $referralCashbackBonuses = ReferralCashbackBonus::whereNull('bonus_type')->take(10)->get();
        foreach ($referralCashbackBonuses as $referralCashbackBonus) {
            $referrer = Member::find($referralCashbackBonus->referrer_user_id);
            $referrer->total_referred = $referrer->total_referred + 1;
            $referrer->save();
            $userBonus = new UserNewBonus();
            $bonus = false;
            if ($referrer->total_referred == 5) {
                $bonus = NewBonusType::where('code', 'refer_5_user')->first();
            } elseif ($referrer->total_referred == 10) {
                $bonus = NewBonusType::where('code', 'refer_10_user')->first();
            } elseif ($referrer->total_referred == 20) {
                $bonus = NewBonusType::where('code', 'refer_20_user')->first();
            } else {
                $referralCashbackBonus->bonus_type = 'referral_bonus';
                $referralCashbackBonus->save();
            }
            if ($bonus) {
                $userBonus->bonus_type_id = $bonus->id;
                $userBonus->user_id = $referralCashbackBonus->referrer_user_id;
                $userBonus->status = 'confirmed';
                $userBonus->is_referral = 1;
                $userBonus->amount = $bonus->amount;
                $referralCashbackBonus->bonus_type = $bonus->code;
                $userBonus->save();
                $balanceTransaction = new BonusBalanceTransaction($referralCashbackBonus->referrer_user_id, $userBonus->amount, $userBonus->id, $userBonus->status, $userBonus->created_at);
                $balanceTransaction->saveTransaction();
                $referralCashbackBonus->save();
            }
        }
    }
}
