<?php

namespace Acms\Services\Setup\Http;

use Acms\Services\Facades\Application;
use Field;

/**
 * setup（install / メンテナンス）の HTTP リクエストを表す値オブジェクト。
 *
 * 旧 AbstractSetup::initialize が握っていた「POST/GET の取り込み」を境界の値オブジェクトへ移し、
 * Action / Middleware はグローバル（$_POST 等）に直接触れず本オブジェクト経由で受け取る。
 * 生成はエントリ端（{@see fromGlobals}）に閉じる。
 */
final class Request
{
    /**
     * @param array<string, mixed> $rawPost 送信有無判定（旧 !empty($_POST)）に使う生 POST
     */
    public function __construct(
        private readonly Field $post,
        private readonly Field $get,
        private readonly array $rawPost,
    ) {
    }

    public static function fromGlobals(): self
    {
        return new self(
            Application::getPostParameter(),
            Application::getGetParameter(),
            $_POST,
        );
    }

    /**
     * 送信（副作用を伴いうるリクエスト）か。旧コードの `!empty($_POST)` と同義。
     */
    public function isSubmitted(): bool
    {
        return $this->rawPost !== [];
    }

    public function post(): Field
    {
        return $this->post;
    }

    public function get(): Field
    {
        return $this->get;
    }
}
