/**
* @param CliMenu $menu
*/
public function __invoke(CliMenu $menu)
{
$menu->close();
$item = $menu->getSelectedItem();
$exercise = $this->exerciseRepository->findByName($item->getText());
$exercises = $this->exerciseRepository->findAll();
$this->userState->setCurrentExercise($item->getText());
$this->userStateSerializer->serialize($this->userState);
$numExercises = count($exercises);
$exerciseIndex = array_search($exercise, $exercises) + 1;
$output = "\n";
$output .= $this->color->__invoke(' LEARN YOU THE PHP FOR MUCH WIN! ')->magenta()->bold() . "\n";
$output .= $this->color->__invoke('*********************************')->magenta()->bold() . "\n";
$output .= "\n";
$output .= $this->color->__invoke(" " . $exercise->getName())->yellow()->bold() . "\n";
$output .= $this->color->__invoke(sprintf(" Exercise %d of %d\n\n", $exerciseIndex, $numExercises))->yellow();
$content = file_get_contents($exercise->getProblem());
$doc = $this->markdownRenderer->render($content);
$doc = str_replace('{appname}', $this->appName, $doc);
$output .= $doc;
$output .= "\n";
$output .= $this->helpLine('To print these instructions again, run', 'print');
$output .= $this->helpLine('To execute your program in a test environment, run', 'run program.php');
$output .= $this->helpLine('To verify your program, run', 'verify program.php');
$output .= $this->helpLine('For help run', 'help');
$output .= "\n\n";
$this->output->write($output);
}