   isEnabled: ->
     enabled
 
-  extra: {}
   enableExtra: (tag) ->
     console.assert tag, 'Are you kidding me? What do you want to enable?'
     return (Debug.wrap 'Nothing happened') if !tag

  getAllExtraOptionsAsArray: ->
    Array.from extraOpts
  _addExOptHandler: (tag) ->
    @extra[tag] ?= new ExOptHandler @enableExtra.bind(@, tag),
                                    @disableExtra.bind(@, tag),
                                    @isExtraEnabled.bind(@, tag),
                                    @_log

  _log: doNothing
  Object.defineProperties @prototype,
    log:
      get: -> if @isEnabled() then @_log else doNothing

  init: ->
    @log "Debug Mode"


doNothing = -> return

# Extra Option Handler
class ExOptHandler
  Object.defineProperties @prototype,
    log:
      get: -> if @isEnabled() then @_log else doNothing

# Extra options container (just need the name)
class ExtraDebugOptions

# Base Implementation
class DebugBase
