<?php

namespace App\Providers;

use App\Models\ProductReview;
use App\Models\Ticket;
use App\Observers\ProductReviewObserver;
use App\Policies\TicketPolicy;
use App\ProductRepositoryInterface;
use App\Repositories\ProductRepository;
use App\View\Composers\LayoutComposer;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        // Bind repository interfaces to implementations
        $this->app->bind(ProductRepositoryInterface::class, ProductRepository::class);
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        // Register ProductReview observer
        ProductReview::observe(ProductReviewObserver::class);
        Gate::policy(Ticket::class, TicketPolicy::class);

        // Register view composer for layout data
        View::composer('layouts.app', LayoutComposer::class);
    }
}
