<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Yajny\EventsYj\Events\RecalculateBalance;
use Yajny\Member\Models\Sale;
use Yajny\Member\Models\UserSales;

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

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Get merchant sales revenue';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $startTime = '2023-03-18';
        $endTime = '2023-03-22';
        $store_id = 62;
        $store_categories = ['Books','Grocery'];
        $sale_ids = DB::select(
            DB::raw("SELECT us.sales_id as id FROM users as u join user_sales as us on us.user_id = u.user_id where u.is_merchant = 0 and us.transaction_time >'" . $startTime . "' and us.transaction_time <'" . $endTime . "' and us.store_id = " . $store_id . ";"));
        foreach ($sale_ids as $sale_id) {
            $sale = Sale::with('items')->find($sale_id->id);
            $counterSelected = $counterAll = $totalSelected = $total = 0;
            foreach ($sale->items as $item) {
                if (in_array($item->category, $store_categories)) {
                    $counterSelected++;
                    $totalSelected += $item->commission;
                }
                $total += $item->commission;
                $counterAll++;
            }
            if ($counterSelected && ($counterAll * $total)) {
                $sale->cashback_percent = (($counterSelected * $totalSelected * 40) + (($counterAll - $counterSelected) * ($total - $totalSelected) * 50)) / ($counterAll * $total);
                $userSale = UserSales::with('user')->where('sales_id', $sale->id)->first();
                $userSale->local_cashback = ($totalSelected * 0.4) + (($total - $totalSelected) * 0.5);
                $sale->save();
                $userSale->save();
                event(new RecalculateBalance($userSale->user));
            }
        }
    }
}
