<?php

namespace WP_Ultimo\Dependencies\Rakit\Validation\Rules;

use WP_Ultimo\Dependencies\Rakit\Validation\Rule;
class Required extends Rule
{
    use Traits\FileTrait;
    /** @var bool */
    protected $implicit = \true;
    /** @var string */
    protected $message = "The :attribute is required";
    /**
     * Check the $value is valid
     *
     * @param mixed $value
     * @return bool
     */
    public function check($value) : bool
    {
        $this->setAttributeAsRequired();
        if ($this->attribute and $this->attribute->hasRule('uploaded_file')) {
            return $this->isValueFromUploadedFiles($value) and $value['error'] != \UPLOAD_ERR_NO_FILE;
        }
        if (\is_string($value)) {
            return \mb_strlen(\trim($value), 'UTF-8') > 0;
        }
        if (\is_array($value)) {
            return \count($value) > 0;
        }
        return !\is_null($value);
    }
    /**
     * Set attribute is required if $this->attribute is set
     *
     * @return void
     */
    protected function setAttributeAsRequired()
    {
        if ($this->attribute) {
            $this->attribute->setRequired(\true);
        }
    }
}
