<?php

namespace Application\Service\Extension\ValidatorV2\validators;

class RequiredValidator extends BaseValidator
{
    /**
     * @var bool
     */
    protected bool $isStrict = false;

    /**
     * 设置严格模式.
     * 如果设置了严格模式, 只有null值会触发验证规则.
     * @param bool $isStrict
     * @return $this
     */
    public function isStrict(bool $isStrict = false): RequiredValidator
    {
        $this->isStrict = $isStrict;

        return $this;
    }

    /**
     * 开始验证。
     * @param $value
     * @param $attribute
     * @return null
     */
    public function valid($value, $attribute)
    {
        if ($this->isEmpty($value)) {
            $this->error = ['{attribute} 不能为空', [
                'attribute' => $attribute
            ]];
        }

        return null;
    }

    /**
     * 验证是否为空。
     * @param $value
     * @return bool
     */
    private function isEmpty($value): bool
    {
        if ($this->isStrict) {
            return $value === null;
        } else {
            return $value === '' || $value === [] || $value === null;
        }
    }
}