<?php

namespace App\Http\Controllers\Network\Classes;

use Exception;
use Yajny\Member\Models\Sale;

class JumiaCSV implements SalesGetterApi
{
    private $networkID;

    public function __construct($networkID)
    {
        $this->networkID = $networkID;
    }

    public function getSales($start_days, $end_days)
    {
        try {
            $csvFile = file_get_contents("https://kol.jumia.com/api/feeds/conversions/download/9ea2129763b39a1466fb87913dbd3c189c4c2273d33bd64fdaa4571b58538174/{$start_days}");
            $salesRows = explode("\n", $csvFile);
            $header = str_getcsv($salesRows[0]);
            $sales = [];
            for ($i = 1; $i < count($salesRows) - 1; $i++) {
                $saleItem = array_combine($header, str_getcsv($salesRows[$i]));
                if (empty($saleItem['Tags']))
                    continue;
                if (isset($sales[$saleItem['Order Nr']])) {
                    if (isset($sales[$saleItem['Order Nr']]['items'][$saleItem['Order Sub Ref. ID']])) {
                        $sales[$saleItem['Order Nr']]['items'][$saleItem['Order Sub Ref. ID']]['Status'] = $saleItem['Status'];
                        $sales[$saleItem['Order Nr']]['items'][$saleItem['Order Sub Ref. ID']]['Amount'] = $saleItem['Amount'];
                        $sales[$saleItem['Order Nr']]['items'][$saleItem['Order Sub Ref. ID']]['Commission Amount'] = $saleItem['Commission Amount'];
                    } else {
                        $sales[$saleItem['Order Nr']]['items'][$saleItem['Order Sub Ref. ID']] = $saleItem;
                    }
                } else {
                    if (Sale::where('network_id', $this->networkID)->where('network_transaction_id', $saleItem['Order Sub Ref. ID'])->count()) {
                        $saleItem['isNew'] = false;
                        $sales[] = $saleItem;
                    } else {
                        $items = [];
                        $existingSale = Sale::where('network_id', $this->networkID)->where('network_transaction_id', $saleItem['Order Nr'])->first();
                        if ($existingSale) {
                            $items = $existingSale->items->mapWithKeys(function ($item) {
                                return [
                                    $item->sku => [
                                        'Order Sub Ref. ID' => $item->sku,
                                        'Amount' => $item->unit_price,
                                        'Commission Amount' => $item->commission,
                                        'Status' => $item->status
                                    ]
                                ];
                            })->toArray();
                        }
                        $sales[$saleItem['Order Nr']] = $saleItem;
                        $sales[$saleItem['Order Nr']]['isNew'] = true;
                        if (isset($items[$saleItem['Order Sub Ref. ID']])) {
                            $items[$saleItem['Order Sub Ref. ID']]['Status'] = $saleItem['Status'];
                            $items[$saleItem['Order Sub Ref. ID']]['Amount'] = $saleItem['Amount'];
                            $items[$saleItem['Order Sub Ref. ID']]['Commission Amount'] = $saleItem['Commission Amount'];
                        } else {
                            $items[$saleItem['Order Sub Ref. ID']] = $saleItem;
                        }
                        $sales[$saleItem['Order Nr']]['items'] = $items;
                    }
                }
            }
            $this->sales = $sales;
            return $sales;
        } catch (Exception $e) {
            return [];
        }
    }
}
