<?php

namespace App\Providers;

use App\Packages\User\Extensions\Auth\AccessTokenGuard;
use App\Packages\User\Extensions\Auth\TokenToUserProvider;
use Auth;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

/**
 * Class AuthServiceProvider
 * @package App\Providers
 */
class AuthServiceProvider extends ServiceProvider
{
	/** @var array */
	protected $policies = [
		'App\Model' => 'App\Policies\ModelPolicy',
	];

	/**
	 * Register any authentication / authorization services.
	 *
	 * @return void
	 */
	public function boot()
	{
		$this->registerPolicies();

		/** Extend auth service, @TODO: Refactore */
		Auth::extend('access_token', function ($app, $name, array $config) {
			// automatically build the DI, put it as reference
			$userProvider = app(TokenToUserProvider::class);
			$request = app('request');

			$result = new AccessTokenGuard($userProvider, $request, $config);

			return $result;
		});
	}
}
