<?php

namespace App\Http\Middleware;

use Closure;
use App\Models\{Site};
use Config;
use View;
use Theme;

/**
 * Class SetSite
 * This class is responsible for setting our site settings based on the URL of a request
 *
 * @package App\Http\Middleware
 */
class SetSite
{
	/**
	 * Handle an incoming request.
	 *
	 * @param  \Illuminate\Http\Request  $request
	 * @param  \Closure  $next
	 * @return mixed
	 */
	public function handle($request, Closure $next)
	{
		// @todo Figure out how to know if this is an API call - and deny it if it's not in the database.
		$so = Site::where('url',$request->root())
			->orwhere('devurl',$request->root())
			// @todo With an API call, we would use ->firstorfail();
			->first();

		// If we dont exist, we'll return a fake model.
		if (! $so) {
			$so = (new Site)->sample();
		}

		Theme::set($so->theme);

		// Set who we are in SETUP.
		Config::set('SITE_SETUP',$so);
		View::share('so',$so);

		return $next($request);
	}
}
