  * as a variable, you have the pushViewController method which permit to execute some other ConsoleViewController
  * after the execution was done.
  *
- * Parameters:
- *
- * - viewController: ConsoleViewControllerProtocol
- *                        The ConsoleViewController that will be executed
+ * Properties:
+ *
+ * - title: String                 The title of the ConsoleNavigationViewController (default: "")
+ *
+ * - animationDuration: UInt32     The push/pop animation duration (default: 2 seconds)
+ *
+ * - viewControllers: [ConsoleViewControllerProtocol]
+ *                                 An array containing the stack of ConsoleViewController present into
+ *                                 the navigation
+ *
+ * - topViewController: ConsoleViewControllerProtocol?
+ *                                 Return (if present) the first element of the ConsoleViewController stack
+ *
+ * - visibleViewController: ConsoleViewControllerProtocol?
+ *                                 Return (if present) the last element of the ConsoleNavigationController stack.
+ *                                 This is the View Controller that will be executed during the
+ *                                 ConsoleNavigationViewController execution
  *
  * Methods:
  *
- * - execute()            Call the execute method of the current ConsoleViewControlled
+ * - execute()            Display, if available, the ConsoleNavigationViewController title and a separator, then
+ *                        call the execute method of the visible ConsoleViewControlled.
  *
  * - pushViewController(_:ConsoleViewControllerProtocol, animated:Bool)
- *                        This will replace the current ConsoleViewController and execute it. Setting
- *                        animated to true will introduce a 2 seconds delay (just to be aligned to the
- *                        UINavigationController.pushViewController method Parameters)
+ *                        This will add a new <ConsoleViewControllerProtocol> to the stack, then execute it.
+ *                        If animated was true, then wait before pushing it (see animationDuration property).
+ *
+ * - popViewController(animated: Bool)
+ *                        This will remove the last <ConsoleViewControllerProtocol> from the stack, then execute
+ *                        the previous one (if available).
+ *                        If animated was true, then wait before pushing it (see animationDuration property).
  *
  * Examples:
  *

 *
 */
public struct ConsoleNavigationViewController: ConsoleViewControllerProtocol {
    var viewController: ConsoleViewControllerProtocol
}
public extension ConsoleNavigationViewController {
    mutating func pushViewController (_ vc: ConsoleViewControllerProtocol, animated: Bool) {
        if animated { sleep(2) }
        viewController = vc
        execute()
    }

    func execute () {
        viewController.execute()
    }
}

/*
 * AppDelegate
 *
 * A simple way to orchestrate multiple viewControllers execution. This will work either with
 * ConsoleViewController and ConsoleNavigationController
 *
 * Parameters:
 *
 * - initialViewController: ConsoleViewControllerProtocol?
 *                        The controller that will be executed when the app will start.

 *
 */
public struct ConsoleViewController <A>: ConsoleViewControllerProtocol {
    let text: String = ""
    let parse: (String) -> A?
    let onComplete: (A) -> () = { _ in }
}
public extension ConsoleViewController {
    // This function execute the viewControllers
