<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\PageRepository;
use App\Interfaces\PageRepositoryInterface;
use App\Services\SettingsService;
use App\Services\AuthService;
use App\Services\ContentService;
use App\Services\PaginateService;
use App\Services\ThemeService;
use App\Services\DocService;
use App\Services\StringService;
use App\Services\FileUploadService;
use App\Services\RenderService;
use App\Services\SortingService;

class FipamoServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     */
    public function register(): void
    {
        //services
        $this->app->bind(SettingsService::class, function ($app) {
            return new SettingsService(new DocService());
        });

        $this->app->bind(AuthService::class, function ($app) {
            return new AuthService(new SettingsService(new DocService()));
        });

        $this->app->bind(ContentService::class, function ($app) {
            return new ContentService();
        });

        $this->app->bind(ThemeService::class, function ($app) {
            return new ThemeService(new SettingsService(new DocService()));
        });

        $this->app->bind(PaginateService::class, function ($app) {
            return new PaginateService(new ContentService());
        });

        $this->app->bind(StringService::class, function ($app) {
            return new StringService();
        });

        $this->app->bind(DocService::class, function ($app) {
            return new DocService();
        });

        $this->app->bind(FileUploadService::class, function ($app) {
            return new FileUploadService();
        });

        $this->app->bind(RenderService::class, function ($app) {
            return new RenderService();
        });

        $this->app->bind(SortingService::class, function ($app) {
            return new SortingService(
                new SettingsService(new DocService()),
                new ContentService(),
                new StringService(),
            );
        });
    }

    /**
     * Bootstrap services.
     */
    public function boot(): void
    {
        $this->app->bind(PageRepositoryInterface::class, PageRepository::class);
    }
}