<?php

namespace Acms\Services\Setup\Install;

use Acms\Services\Setup\Tool\ToolErrors;
use Field;

/**
 * インストール phase 2（ドメイン設定）。旧 setup/install.php の Install_Step_2。
 * ドメインを検証し、config.server.php の DOMAIN に書き込む。
 */
class Step2 extends AbstractStep
{
    public function template(): string
    {
        return '@setup/install/domain.twig';
    }

    /**
     * @return array<string, mixed>
     */
    public function viewData(Field $post): array
    {
        // config.server.php に既存の DOMAIN があれば初期値として提示する（再インストール時などに現在値を
        // 引き継ぐ）。フォーム再表示では送信値（fields.domain）を優先し、未入力時のみこの既定値を使う。
        return ['defaultDomain' => defined('DOMAIN') ? DOMAIN : ''];
    }

    public function check(Field $post): StepResult
    {
        $errors = new ToolErrors();
        if ($post->get('domain') === '') {
            $errors = $errors->with('domain_input');
        } elseif (!preg_match(REGEX_VALID_DOMAIN, $post->get('domain'))) {
            $errors = $errors->with('domain_invalid');
        }

        return new StepResult($errors, new ToolErrors());
    }

    public function commit(Field $post): StepResult
    {
        return new StepResult($this->writeConfig('DOMAIN', $post->get('domain')), new ToolErrors());
    }
}
