<?php

namespace App\Http\Middleware;

use App\Http\Controllers\ConsumerAPI\ConsumerApiController;
use App\Http\Controllers\ConsumerAPI\MessageBag;
use Closure;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

class ConsumerAPIAuth extends MessageBag
{
    private $request;
    private $error;
    private $routes;

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $this->request = $request;

        $this->isValidated();

        if ($this->error){
            //return $this->error;
        }
        $response = $next($request);

        if ($response instanceof JsonResponse && $response->getData() && !isset($response->getData()->status)){
            return $this->resolveResponse($response);
        }

        return $response;
    }

    public function isValidated(){
        $this->checkErrors();
        if (!$this->error) {
            $routeCollection = Route::getRoutes();

            foreach ($routeCollection as $value) {
                if (strpos($value->uri(), $this->request->route()->getPrefix()) !== false) {
                    $this->routes[$value->uri()] = ['method' => $value->methods()];
                }
            }

            if (!in_array($this->request->route()->uri(), array_keys($this->routes)))
                $this->error = $this->errorBucket[404];
        }
    }

    public function checkErrors(){
        if (!$this->request->isJson())
            $this->error = $this->errorBucket[415];
    }
}
