<?php

declare(strict_types=1);

namespace Acms\Services\Field;

use Field;
use Field_Validation;

/**
 * extract()（POST → カスタムフィールド変換）の結果。
 *
 * 抽出された Field と「削除対象として集まった Field」の 2 つを 1 つの値として返す。
 *
 * Why not Field_Validation だけを返して削除フィールドはプロパティに残す（移設前の形）: 呼び出し側は
 * extract() の直後に getDeleteField() を呼ぶ必要があり、順序を守らないと前回の抽出結果を掴む。
 * 「extract した Extractor インスタンスから、そのタイミングで取り出す」という暗黙の契約になっていて、
 * 型にも現れないため取り違えても静的解析で検出できなかった。
 */
class ExtractResult
{
    /**
     * @var Field_Validation
     */
    private $field;

    /**
     * @var Field
     */
    private $deleteField;

    public function __construct(Field_Validation $field, Field $deleteField)
    {
        $this->field = $field;
        $this->deleteField = $deleteField;
    }

    /**
     * 抽出されたカスタムフィールド
     */
    public function field(): Field_Validation
    {
        return $this->field;
    }

    /**
     * 削除対象として集まったフィールド
     *
     * image/file 型で $_FILES にエントリーが無い場合に、派生キー（@path / @baseName 等）を
     * 「消す対象」として積んだもの。保存側がこれを見て DB から削除する。
     */
    public function deleteField(): Field
    {
        return $this->deleteField;
    }
}
