<?php
declare(strict_types=1);

namespace Celena\Core\Http\Middleware;

use Celena\Core\Http\Request;
use Celena\Core\Http\Response;
use Celena\Core\Security\Auth;
use Closure;

/**
 * Защищает фронтовый личный кабинет: если посетитель не залогинен —
 * редирект на /account/login. Ставится на группу /account/* (кроме
 * самих страниц входа/регистрации). Любой залогиненный пользователь
 * (в т.ч. сотрудник) может смотреть свой кабинет.
 */
final class CustomerAuthMiddleware
{
    public function __construct(private readonly Auth $auth)
    {
    }

    public function handle(Request $request, Closure $next): Response
    {
        if (!$this->auth->check()) {
            if ($request->wantsJson()) {
                return Response::json(['error' => 'unauthenticated'], 401);
            }
            return Response::redirect('/account/login');
        }
        return $next($request);
    }
}
