class app.Settings
  SETTINGS_KEY = 'settings'
  DOCS_KEY = 'docs'

  @defaults: ->
    count: 0
    hideDisabled: false
    hideIntro: false
    news: 0
    autoUpdate: true

  constructor: (@store) ->
    @create() unless @settings = @store.get(SETTINGS_KEY)

  create: ->
    @settings = @constructor.defaults()
    @applyLegacyValues @settings
    @save()
    return

  applyLegacyValues: (settings) ->
    for key, v of settings when (value = @store.get(key))?
      settings[key] = value
      @store.del(key)
    return

  save: ->
    @store.set SETTINGS_KEY, @settings

  set: (key, value) ->
    @settings[key] = value
    @save()

  get: (key) ->
    @settings[key]

  hasDocs: ->
    try !!Cookies.get DOCS_KEY

  getDocs: ->
    try
      Cookies.get(DOCS_KEY)?.split('/') or app.config.default_docs
    catch
      app.config.default_docs

  setDocs: (docs) ->
    try
      Cookies.set DOCS_KEY, docs.join('/'),
        path: '/'
        expires: 1e8
    catch
    return

  reset: ->
    try Cookies.expire DOCS_KEY
    try @store.del(SETTINGS_KEY)
    return