<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class NotificationController extends Controller
{
    public function feed(Request $request): JsonResponse
    {
        $limit = min(max((int) $request->query('limit', 10), 1), 30);
        $user = Auth::user();
        if (! $user instanceof User) {
            return response()->json(['count' => 0, 'items' => []], 401);
        }

        /** @var User $user */
        $items = $user?->unreadNotifications()
            ->latest()
            ->limit($limit)
            ->get()
            ->map(function ($notification) {
                $data = is_array($notification->data) ? $notification->data : [];
                return [
                    'id' => $notification->id,
                    'message' => (string) ($data['message'] ?? 'New notification'),
                    'url' => $data['url'] ?? null,
                    'type' => $data['type'] ?? null,
                    'created_at' => $notification->created_at?->toDateTimeString(),
                ];
            })
            ->values()
            ->all();

        return response()->json([
            'count' => $user->unreadNotifications()->count(),
            'items' => $items,
        ]);
    }

    public function markAllRead(): JsonResponse
    {
        $user = Auth::user();
        if ($user instanceof User) {
            $user->unreadNotifications->markAsRead();
        }

        return response()->json(['ok' => true]);
    }
}
