<?php

namespace BookStack\Providers;

use BookStack\Actions\Activity;
use BookStack\Actions\ActivityService;
use BookStack\Actions\View;
use BookStack\Actions\ViewService;
use BookStack\Auth\Permissions\PermissionService;
use BookStack\Settings\Setting;
use BookStack\Settings\SettingService;
use BookStack\Uploads\Image;
use BookStack\Uploads\ImageService;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Contracts\Filesystem\Factory;
use Illuminate\Support\ServiceProvider;
use Intervention\Image\ImageManager;

class CustomFacadeProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('activity', function () {
            return new ActivityService(
                $this->app->make(Activity::class),
                $this->app->make(PermissionService::class)
            );
        });

        $this->app->bind('views', function () {
            return new ViewService(
                $this->app->make(View::class),
                $this->app->make(PermissionService::class)
            );
        });

        $this->app->bind('setting', function () {
            return new SettingService(
                $this->app->make(Setting::class),
                $this->app->make(Repository::class)
            );
        });

        $this->app->bind('images', function () {
            return new ImageService(
                $this->app->make(Image::class),
                $this->app->make(ImageManager::class),
                $this->app->make(Factory::class),
                $this->app->make(Repository::class)
            );
        });
    }
}