<?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;

/**
 * Защищает маршруты: если пользователь не залогинен — редирект на /admin/login.
 * Ставится на группу роутов /admin/* (кроме самого /admin/login).
 */
final class AuthMiddleware
{
    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('/admin/login');
        }
        // Покупатели (роль customer) — это посетители фронта, им не место в админке.
        // Их «панель» — личный кабинет /account.
        $user = $this->auth->user();
        if ($user !== null && (string) ($user['role'] ?? '') === 'customer') {
            if ($request->wantsJson()) {
                return Response::json(['error' => 'forbidden'], 403);
            }
            return Response::redirect('/account');
        }
        return $next($request);
    }
}
