protected function interact(InputInterface $input, OutputInterface $output)
    {
        $io = $this->getIO($input, $output);
        $io->write(Accompli::LOGO);
        $io->writeln(' =========================');
        $io->writeln('  Configuration generator');
        $io->writeln(' =========================');

        $accompli = new Accompli(new ParameterBag());
        $accompli->initializeStreamWrapper();

        $recipe = $io->choice('Select a recipe to extend from', $this->getAvailableRecipes(), 'defaults.json');
        if ($recipe === 'Other') {
            $this->configuration['$extend'] = $io->ask('Enter the path to the recipe');
        } elseif ($recipe === 'None') {
            unset($this->configuration['$extend']);
        } else {
            $this->configuration['$extend'] = 'accompli://recipe/'.$recipe;
        }

        $this->interactForHostConfigurations($io);
        $this->interactForTaskConfigurations($io);

        $io->writeln(' The generator will create the following configuration:');
        $io->writeln($this->getJsonEncodedConfiguration());
        $io->confirm('Do you wish to continue?');
    }