true,
        'verbosity'   => self::VERBOSITY_NORMAL,
        'interactive' => true
    ];
    /**
     * @var \Symfony\Component\Console\Helper\FormatterHelper
     */
    public $formatHelper;
    public $waitForDebugOutput = true;
    protected $isInteractive = false;
    public function __construct($config)
    {
        $this->config = array_merge($this->config, $config);
        // enable interactive output mode for CLI
        $this->isInteractive = $this->config['interactive']
            && isset($_SERVER['TERM'])
            && php_sapi_name() == 'cli'
            && $_SERVER['TERM'] != 'linux';
        $formatter = new OutputFormatter($this->config['colors']);
        $formatter->setStyle('default', new OutputFormatterStyle());
        $formatter->setStyle('bold', new OutputFormatterStyle(null, null, ['bold']));
        $formatter->setStyle('focus', new OutputFormatterStyle('magenta', null, ['bold']));
        $formatter->setStyle('ok', new OutputFormatterStyle('green', null, ['bold']));
        $formatter->setStyle('error', new OutputFormatterStyle('white', 'red', ['bold']));
        $formatter->setStyle('fail', new OutputFormatterStyle('red', null, ['bold']));
        $formatter->setStyle('pending', new OutputFormatterStyle('yellow', null, ['bold']));
        $formatter->setStyle('debug', new OutputFormatterStyle('cyan'));
        $formatter->setStyle('comment', new OutputFormatterStyle('yellow'));
        $formatter->setStyle('info', new OutputFormatterStyle('green'));
        $this->formatHelper = new FormatterHelper();
        parent::__construct($this->config['verbosity'], $this->config['colors'], $formatter);
    }
    public function isInteractive()
    {
        return $this->isInteractive;
    }
    protected function clean($message)
    {
        // clear json serialization
        $message = str_replace('\/', '/', $message);
        return $message;
    }
    public function debug($message)
    {
        $message = print_r($message, true);
        $message = str_replace("\n", "\n  ", $message);
        $message = $this->clean($message);
        $message = OutputFormatter::escape($message);
        if ($this->waitForDebugOutput) {
            $this->writeln('');
            $this->waitForDebugOutput = false;
        }
        $this->writeln("  $message");
    }
    public function message($message)
    {
        $message = call_user_func_array('sprintf', func_get_args());
        return new Message($message, $this);
    }
    public function exception(\Exception $e)
    {
        $class = get_class($e);
        $this->writeln("");
        $this->writeln("(![ $class ]!)");
        $this->writeln($e->getMessage());
        $this->writeln("");
    }
    public function notification($message)
    {
        $this->writeln("$message");
    }
}