<?php

namespace App\Http\Controllers\Network;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use Yajny\Member\Models\Network;
use Yajny\Models\Store;

class NetworkController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    public function fetchSales($start_days,$end_days)
    {
        Log::debug('AMAZON_EG_DEBUGGER::fetchSales', [
            'cli' => app()->runningInConsole(),
            'request' => request(),
            'trace' => debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS),
        ]);
        if($end_days > $start_days)
            die('end_days has to be less than start_days');

        $networks = Network::all();
        foreach($networks as $network) {
            $networkCtrl = app()->make('\App\Http\Controllers\Network\\' . $network->controller);
            $networkCtrl->getSales($network,$start_days,$end_days);
        }
    }


    public function fetchStores($network_id)
    {


        $network = Network::find($network_id);
        $networkCats = $network->categories()->where('cat_for', 'store')->get();
        $network->categoryMappingName = $this->mapCatNames($networkCats);
        $network->categoryMappingId = $this->mapCatIds($networkCats);

        $networkCtrl = app()->make('\App\Http\Controllers\Network\\' . $network->controller);
        $networkCtrl->getStores($network);
    }

    public function mapCatNames($networkCats)
    {

        return $networkCats->filter(function ($catMap) {
            return strlen($catMap->network_cat_name) > 1;
        })->mapWithKeys(function ($catMap) {
            return [md5(Str::slug($catMap->network_cat_name))  => $catMap->system_cat_id];
        })->toArray();


    }

    public function mapCatIds($networkCats)
    {

        return $networkCats->filter(function ($catMap) {
            return strlen($catMap->network_cat_id) > 1;
        })->mapWithKeys(function ($catMap) {
            return [md5(Str::slug($catMap->network_cat_id))  => $catMap->system_cat_id];
        })->toArray();


    }


    public function fetchCoupons($network_id)
    {


        $network = Network::find($network_id);
        $networkCats = $network->categories()->where('cat_for', 'coupon')->get();
        $network->categoryMappingName = $this->mapCatNames($networkCats);
        $network->categoryMappingId = $this->mapCatIds($networkCats);
        $network->storeIds = $this->mapStoreIds($network->id);
        $networkCtrl = app()->make('\App\Http\Controllers\Network\\' . $network->controller);
        $networkCtrl->getCoupons($network);
    }

    public function mapStoreIds($network_id)
    {
        return Store::withoutGlobalScopes()->where('network_id',$network_id)->select('id','network_store_id')->get()->mapWithKeys( function($item) {
            return [ $item->network_store_id => $item->id ];
        } )->toArray();
    }


}
