<?php
namespace App\Http\Middleware;
use App\iSession;
use Illuminate\Support\Facades\Response;

class CorsMiddleware {

    public function handle($request, \Closure $next) {

        if($request->header('Referer') && strstr($request->header('Referer'), 'yajny.') === false)
            die;

        if($_SERVER['REQUEST_METHOD'] != 'POST' )
       {
          return $next($request);
       }
       if( $request->renew == env('RENEW_TOKEN') )
       {
           return $next($request);
       }

        if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST))
        $_POST = json_decode(file_get_contents('php://input'), true);

        if ($request->getMethod() === "OPTIONS") {
            return Response::json([], 401);
        }
        if(strpos('w'.$request->path(),'auto/') || strpos('w'.$request->path(),'genToken') || strpos('w'.$request->path(),'conversions/webhook')){
            // do nothing this is accepted url

        }
         else
        {

            // die(print_r($_POST));
            // check if session id and csrf token is passed
            if(isset($_POST['web_token']) && isset($_POST['token']) && $_SERVER['REQUEST_METHOD'] == 'POST' )
            {

                // get session info
                $session = iSession::find($_POST['web_token']);
                if(!$session)  return Response::json([], 401);
                // if last user activity and user session request time is more than 300 sections difference , send blank response
                if( time() - $session->last_activity  > 3000 &&  ! isset($_POST['appy'])  )
                return Response::json([], 401);
                else
                {
                    $payload = unserialize(base64_decode($session->payload));

                    // check if csrf token passed matches with session info
                    if($payload['_token'] == $_POST['token']  )
                    {

                    // return response($payload);
                        $request->attributes->add(['user_id' => $payload['user_id'] ?? 0 ]);

                        // set the lang for future translate
                        if( isset($payload['lang']) )
                        app('translator')->setLocale($payload['lang']);


                    }
                    else{
                        return Response::json([], 401);
                    }
                }
            }
            else{
                // \Log::debug($request);
                return Response::json([], 401);
            }
        }

        $response = $next($request);
        $response->header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PUT, PATCH, DELETE');
        $response->header('Access-Control-Allow-Headers', $request->header('Access-Control-Request-Headers'));
        $response->header('Access-Control-Allow-Origin', '*');

        return $response;
    }


}
