<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;

class CheckApiRequestLanguage
{

    public const LANG_HEADER_NAME = 'Lang-Code';

    /**
     * Checks for a header presence to assume the language
     * If the requirements are not met it will fallback to the default app language
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {

        $headerLang = $request->header(static::LANG_HEADER_NAME);

        //Checking to see if a full locale is being passed. If so use only the left part
        if (strpos($headerLang, '-') !== false) {
            $langArr = explode('-', $headerLang);
            $headerLang = $langArr[0];
        }

        $allowedLangs =  LaravelLocalization::getSupportedLanguagesKeys();
        $lang = !$headerLang || !in_array($headerLang, $allowedLangs) ?  LaravelLocalization::getDefaultLocale() : $headerLang;
        LaravelLocalization::setLocale($lang);

        return $next($request);
    }
}
