<?php

namespace App\Services;

use App\Models\Notification;
use App\Models\User;

/**
 * تنها نقطه‌ی ورود برای ساخت اعلان — طبق docs/architecture-addendum.md،
 * اگر کانال ایمیل/پیامک در آینده اضافه شود، فقط همین کلاس تغییر می‌کند.
 */
class NotificationService
{
    public function send(User $user, string $type, string $title, ?string $body = null, ?string $actionUrl = null): Notification
    {
        return Notification::create([
            'user_id' => $user->id,
            'type' => $type,
            'title' => $title,
            'body' => $body,
            'action_url' => $actionUrl,
        ]);
    }

    public function unreadCountFor(User $user): int
    {
        return Notification::query()->where('user_id', $user->id)->unread()->count();
    }

    public function markRead(Notification $notification): void
    {
        if (! $notification->isRead()) {
            $notification->update(['read_at' => now()]);
        }
    }

    public function markAllRead(User $user): void
    {
        Notification::query()->where('user_id', $user->id)->unread()->update(['read_at' => now()]);
    }
}
