/**
  * @param ApplicationInterface $app
  */
 public function __invoke(ApplicationInterface $app)
 {
     $exception = $app->getException();
     if (php_sapi_name() == 'cli') {
         throw $exception;
     } else {
         $output = Tag::h1('An error occurred');
         do {
             $output .= $this->renderException($exception);
         } while ($exception = $exception->getPrevious());
         $output .= Tag::h2('Workflow');
         foreach ($app->getExecutionTrace() as $step => $middlewares) {
             $output .= Tag::h3('Step: ' . $step);
             /**
              * @var Hook $hook
              */
             foreach ($middlewares as $middleware) {
                 $output .= Tag::dt([$middleware->getReference() . ': ', $middleware->getDescription()]);
             }
         }
         // display config
         $output .= Tag::h2('Configuration');
         ob_start();
         var_dump($app->getConfig()->getInternalValue());
         $output .= ob_get_clean();
         // display services
         $output .= Tag::h2('Services');
         foreach ($app->getServicesFactory()->getServices() as $spec) {
             $output .= Tag::h3($spec->getId());
             ob_start();
             var_dump($spec);
             $output .= ob_get_clean();
         }
         // manually emit response
         (new SapiEmitter())->emit((new HtmlResponse($output))->withStatus(500));
     }
 }