<?php

namespace Acms\Services\Setup\Http\Middleware;

use Acms\Services\Setup\Http\Middleware;
use Acms\Services\Setup\Http\Request;
use Acms\Services\Setup\Http\Response;
use Acms\Services\Setup\SetupSession;

/**
 * setup メンテナンスツール（fix / import / update）の認証ガード。
 *
 * 旧 Surfacer::__construct 冒頭の checkAuth() → die を、短絡 Response（403）へ置き換えたもの。
 * 未認証なら後続（Action）を実行せず 403 を返す。メンテナンスメニュー（index）はログイン画面を
 * 出す挙動が別なので、このミドルウェアは使わず MenuAction 内で分岐する。
 */
final class AuthMiddleware implements Middleware
{
    public function __construct(private readonly SetupSession $session)
    {
    }

    public function process(Request $request, callable $next): Response
    {
        if (!$this->session->isAuthenticated()) {
            return Response::html(
                'メンテナンス実行に対する権限がありません。管理者はメンテナンスメニューからログインし直してください。',
                403
            );
        }
        return $next($request);
    }
}
