<?php

namespace App\Console\Commands;

use Carbon\Carbon;
use GuzzleHttp\Client;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Yajny\Member\Models\Sale;
use Yajny\Member\Models\SaleItem;
use Yajny\Member\Models\UserSales;

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

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'recreate items';
    public $baseURL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/getReport';
    public $client;

    /**
     * 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()
    {
        for ($i = 1; $i < 32; $i++) {
            $a = $i;
            if ($i < 10) $a = "0" . $i;
            $fileName = "yajnyeg-21-earnings-report-202301{$a}.xml.gz";
            //$this->output->write($fileName,true);
            $salesCompressedResponse = $this->client->get($this->baseURL . '?filename=' . $fileName, [
                'auth' => [
                    $this->getAuthUserName(),
                    $this->getAuthPassword(),
                    'digest'
                ]
            ]);
            $compressedResponse = $salesCompressedResponse->getBody()->getContents();
            if ($compressedResponse) {
                $xmlDecodedResponse = gzdecode($compressedResponse);
                $rawSalesXML = simplexml_load_string($xmlDecodedResponse);
                $rawSales = json_decode(json_encode($rawSalesXML), true);
                if (isset($rawSales['Items']['Item'])) {
                    $itemsCount = 0;
                    $checksum = md5(json_encode($rawSales['Items']['Item']));

                    foreach ($rawSales['Items']['Item'] as $key => $item) {

                        $saleItem = $item['@attributes'];
                        if (str_contains($saleItem['Earnings'], ',')) {
                            $saleItem['Earnings'] = str_replace(',', '', $saleItem['Earnings']);
                        }
                        if (str_contains($saleItem['Revenue'], ',')) {
                            $saleItem['Revenue'] = str_replace(',', '', $saleItem['Revenue']);
                        }
                        if (str_contains($saleItem['SubTag'], '?')) {
                            $saleItem['SubTag'] = trim($saleItem['SubTag'], '?');
                        }
                        if (str_contains($saleItem['SubTag'], ' ')) {
                            $saleItem['SubTag'] = trim($saleItem['SubTag'], ' ');
                        }
                        if ($saleItem['SubTag'] == '-') {
                            $saleItem['SubTag'] = 0;
                        }
                        if (str_contains($saleItem['SubTag'], ',')) {
                            $saleItem['SubTag'] = explode(',', $saleItem['SubTag'])[1];
                        }
                        if (!is_numeric($saleItem['SubTag']))
                            continue;
                        $orderComission=$saleItem['Earnings'];
                        $orderQty=$saleItem['Qty'];
                        if ($saleItem['Earnings']<=0) $orderComission=0.00;
                        if ($saleItem['Qty']<=0) $orderQty=0;
                        $Sale=Sale::where('click_id',$saleItem['SubTag'])
                            ->where("order_amount",0)
                            ->where("comission",0)
                            ->first();
                        // getting sale data by click_id
                        if ($Sale){


                        $amazonCategory=DB::table("amazon_categories")->where('amazon_category_id',$saleItem['Category'])->first();
                        $newDBSaleItem= new SaleItem();
                        $newDBSaleItem->sale_id=$Sale->id;
                        $newDBSaleItem->unit_price=$saleItem['Price'];
                        $newDBSaleItem->quantity=$orderQty;
                        $newDBSaleItem->category=$amazonCategory->category_name;
                        $newDBSaleItem->commission=$orderComission;
                        $newDBSaleItem->report_date="2023-01-".$a;
                        $newDBSaleItem->earning_date="2023-01-".$a;
                        $newDBSaleItem->amazon_category_id=$amazonCategory->amazon_category_id;
                        $newDBSaleItem->status=$Sale->status;
                        $newDBSaleItem->save();
                        $this->output->write("sync Sale id   ".$Sale->id,true);
                        }
                    }

                    }
                }

        }
    }
    function getAuthUserName(): string
    {
        return 'yajnyeg';
    }

    function getAuthPassword(): string
    {
        return 'Amazon@12345';
    }
}
