<?php

namespace App\Console\Commands;


use Illuminate\Console\Command;
use GuzzleHttp\Client;
use Illuminate\Support\Arr;
use Mockery\Exception;


class FixAmazonSales extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'amazon:fix {--rd|report_date=}';

    public $baseURL = 'https://assoc-datafeeds-eu.amazon.com/datafeed/getReport';
    public $client;
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Adding Store Network and click to Sale_items table';

    /**
     * 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()
    {
        $total=0;
        for ($i=1;$i<32;$i++){

            $a=$i;
            if ($i<10) $a="0".$i;
            $this->output->write($a,true);
            $fileDate="202305".$a;
            $fileName="yajnyeg-21-earnings-report-202305{$a}.xml.gz";
            //$this->output->write($fileName,true);
            $salesCompressedResponse = $this->client->get($this->baseURL. '?filename='.$fileName, [
                'auth' => [
                    $this->getAuthUserName(),
                    $this->getAuthPassword(),
                    'digest'
                ]
            ]);
            $sum=0;
            $compressedResponse = $salesCompressedResponse->getBody()->getContents();
            if ($compressedResponse) {
                $xmlDecodedResponse = gzdecode($compressedResponse);
                $rawSalesXML = simplexml_load_string($xmlDecodedResponse);
                $rawSales = json_decode(json_encode($rawSalesXML), true);
                $categories = Arr::pluck($rawSales['ProductLine_array']['ProductLine'], 'ProductGroupName', 'GLProductGroupID');
                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['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;

                        $saleItem['categoryName'] = $categories[$saleItem['Category']] ?? '';
                        if ($saleItem['Qty'] < 0)
                            $saleItem['Type'] = 'Return';
                        //  $this->output->write($saleItem['SubTag'],true);

                        if (isset($sales[$saleItem['SubTag']])) {
                            $sales[$saleItem['SubTag']]['items'][] = $saleItem;
                        } else {
                            $sales[$saleItem['SubTag']] = $saleItem;
                            $sales[$saleItem['SubTag']]['currencyCode'] = "EGP";
                            $sales[$saleItem['SubTag']]['file_date'] = $fileDate;
                            $sales[$saleItem['SubTag']]['items'] = [$saleItem];
                        }
                        $itemsCount++;
                        $sum=$sum+$saleItem["Earnings"];



                    }



                }

            }
            else {
                throw new Exception('Unexpected Empty Response');
            }
            $total=$total+$sum;
        }
        $this->output->write($total);
    }
    function getAuthUserName(): string
    {
        return 'yajnyeg';
    }

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