<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\LocationRepository;
use App\Repositories\SourceRepository;
use App\Repositories\MemberRepository;
use App\Services\UpdateService;
use App\Services\MaintenanceService;
use App\Models\Location;
use App\Models\Source;
use App\Models\Member;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        $this->app->bind(LocationRepository::class, function ($app) {
            return new LocationRepository(new Location());
        });

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

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

        $this->app->bind(UpdateService::class, function ($app) {
            return new UpdateService(
                new LocationRepository(new Location()),
                new SourceRepository(new Source())
            );
        });

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

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

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        //
    }
}
