protected function askForMixed($key, $required = false, $default = null, array $values = []) {
        $question = sprintf(
            'What is the value for configuration setting "%s"',
            $key
        );

        $options = [];

        if (count($values) > 0) {
            foreach ($values as $value) {
                switch (gettype($value)) {
                    case 'boolean':
                        $options[] = ($value) ? 'yes' : 'no';
                        break;
                    default:
                        $options[] = $value;
                        break;
                }
            }

            $question .= sprintf(
                ' (%s)',
                implode(', ', $options)
            );
        }

        $question .= '?';

        if (isset($default)) {
            switch (gettype($default)) {
                case 'boolean':
                    $question .= sprintf(' [%s]:', ($default) ? 'yes' : 'no');
                    break;
                default:
                    $question .= sprintf(' [%s]:', $default);
                    break;
            }
        }

        $answer = trim(IO::in($question));

        switch ($answer) {
            case 'yes':
            case 'y':
            case '1':
            case 'true':
                return true;
            case 'no':
            case 'n':
            case '0':
            case 'false':
                return false;
            case '':
                if (isset($default)) {
                    return $default;
                } elseif ($required) {
                    $this->log->warning('Excuse me, what do you mean?');

                    return $this->askForMixed($key, $required, $default, $values);
                }
                break;
            default:
                if (count($values) && !in_array($answer, $values)) {
                    $this->log->warning(
                        'Wrong answer. Here are your options: %s',
                        implode(', ', $options)
                    );

                    return $this->askForMixed($key, $required, $default, $values);
                }

                return $answer;
        }

        return null;
    }