<?php

namespace App\Providers;

use App\Services\Backoffice\BackendUserService;
use App\Services\Backoffice\BackofficeMenuService;
use App\Services\Backoffice\BackofficeService;
use App\Services\Backoffice\ContentTypesService;
use App\Services\Backoffice\MediaService;
use App\Services\Backoffice\RequestContext;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;

class BackofficeServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     */
    public function register(): void
    {
        $this->app->singleton('requestcontext', function () {
            return new RequestContext();
        });

        $this->app->singleton('contenttypes', function () {
            return new ContentTypesService;
        });

        $this->app->singleton('backenduserservice', function () {
            return new BackendUserService();
        });

        $this->app->singleton('backofficeservice', function () {
            return new BackofficeService();
        });

        $this->app->singleton('backoffice_menu_service', function () {
            return new BackofficeMenuService();
        });

        $this->app->singleton('mediaservice', function () {
            return new MediaService();
        });
    }

    /**
     * Bootstrap services.
     */
    public function boot(): void
    {
        Gate::define('admin-has-permission', function ($user, $permissions) {
            return $user->hasPermission($permissions);
        });
    }
}
