public function registerCondition($name, $className)
    {
        if (false === is_string($name)) {
            throw InvalidArgumentTypeException::conditionNameNotString($name);
        }

        if (false === class_exists($className)) {
            throw ClassNotFoundException::conditionClassNameNotFound($name, $className);
        }

        if (false === in_array(ConditionItemInterface::class, class_implements($className))) {
            throw InvalidArgumentTypeException::conditionClassNameNotValid($className);
        }

        $this->conditions[$name] = $className;

        return $this;
    }