<?php

namespace App\Console\Commands;

use Carbon\Carbon;
use GuzzleHttp\Client;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Yajny\Member\Models\Currencies;
use Yajny\Member\Models\CurrencyRate;
use Yajny\Member\Models\Member;
use Yajny\Member\Models\Sale;
use Yajny\Member\Models\SaleItem;
use Yajny\Member\Models\UserBonus;
use Yajny\Member\Models\UserNewBonus;
use Yajny\Member\Models\UserPayouts;
use Yajny\Member\Models\UserSales;

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

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'fix orders amounts ';
    protected  $fileName="yajnyeg-21-earnings-report-20230508.xml.gz";
    protected  $baseURL="https://assoc-datafeeds-eu.amazon.com/datafeed/getReport";

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
        $this->client = new Client();

    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $currencyRates = CurrencyRate::all();
        for ($i=1;$i<32;$i++){
            $a=$i;
            if ($i<10) $a="0".$i;
            $dateToFetch="2022-12-".$a;
            $sales=Sale::where("transaction_time","LIKE","2022-12-%")
                ->where("network_id",19)
                ->get();
            try {
                foreach ($sales as $sale){
                   // $created_at=Carbon::parse($sale->transaction_time)->addDay(1);
                    //DB::table("sales")->where("id",$sale->id)->update(["created_at"=> $created_at]);

                    /*
                    // this part is for fix sales from sale_items amounts
                    $id=$sale->id;
                    $saleItems=SaleItem::where('sale_id',$id)->get();
                    $totalPrice=0;
                    $totalComission=0;

                    foreach ($saleItems as $saleItem){
                        $totalPrice+=$saleItem->unit_price*$saleItem->quantity;
                        $totalComission+=$saleItem->commission;
                    }
                    $sale->local_order_amount=$totalPrice;
                    $sale->local_comission=$totalComission;
                    $sale->order_amount=$totalPrice/$sale->currency_rate;
                    $sale->comission=$totalComission/$sale->currency_rate;
                    $sale->save();
                    */
                    $egpRate = $this->getCurrencyRate($currencyRates, 'EGP', $sale->transaction_time);
                    $sarRate = $this->getCurrencyRate($currencyRates, 'SAR', $sale->transaction_time);
                    $aedRate = $this->getCurrencyRate($currencyRates, 'AED', $sale->transaction_time);
                    $kwdRate = $this->getCurrencyRate($currencyRates, 'KWD', $sale->transaction_time);
                    $userSale=UserSales::where("sales_id",$sale->id)->first();
                    $this->output->write($sale->id,true);
                    if ($userSale){
                        $userCashback=$sale->comission*(($sale->cashback_percent)/100);
                        $userSale->order_amount=$sale->order_amount;
                        $userSale->cashback=$userCashback;
                        $userSale->local_order_amount=$sale->order_amount*$sale->currency_rate;
                        $userSale->local_cashback=$userCashback*$sale->currency_rate;
                        $userSale->cashback_egp=$userCashback*$egpRate;
                        $userSale->cashback_sar=$userCashback*$sarRate;
                        $userSale->cashback_aed=$userCashback*$aedRate;
                        $userSale->cashback_kwd=$userCashback*$kwdRate;
                        $userSale->save();
                        $this->output->write($userSale->id);
                    }
                }

            }catch (\Exception $exception){
                Log::error(
                    'message ' . $exception->getMessage()

                )
                ;
            }
        }

    }
    public function getCurrencyRate($currencyRateCollection, $currencyCode, $dateTime)
    {
        $currencyRate = $currencyRateCollection->where('start_date', '<', $dateTime)
            ->where('currency_code', $currencyCode)
            ->sortByDesc('start_date')->first();
        if (is_null($currencyRate)) $currencyRate = $currencyRateCollection->where('currency_code', $currencyCode)->first();
        return $currencyRate->conversion_rate;
    }
}
