<?php

use Acms\Services\Setup\Http\Middleware\CsrfMiddleware;
use Acms\Services\Setup\Http\Middleware\InstalledGuardMiddleware;
use Acms\Services\Setup\Http\Middleware\SessionMiddleware;
use Acms\Services\Setup\Http\Pipeline;
use Acms\Services\Setup\Http\Request;
use Acms\Services\Setup\Install\Factory;
use Acms\Services\Setup\InstallStatus;
use Acms\Services\Setup\SetupSession;

require_once dirname(__FILE__) . '/setup-application.php';

// インストールウィザード。W1: 再実行ガード（インストール済み＋トークンなしは遮断）。
// W2: 副作用リクエスト（do / phase=6）のみ CSRF 必須。セッション開始は SessionMiddleware。
$session = new SetupSession();
$pipeline = new Pipeline(
    [
        new SessionMiddleware($session),
        new InstalledGuardMiddleware(new InstallStatus(), InstalledGuardMiddleware::BLOCK_REINSTALL, $session),
        new CsrfMiddleware(
            $session,
            static fn(Request $req): bool => Factory::isSideEffectRequest($req->post()),
            '不正なリクエストです。ページを再読み込みして、最初からインストールをやり直してください。'
        ),
    ],
    new Factory($session)
);
$pipeline->handle(Request::fromGlobals())->emit();

App::checkException();
