memoize = require "./memo/fn"

module.exports = 
  options: (model) -> model.__isModel
  decorate: (model) ->

    # calls load regardless - not cached
    model.reload = (next = () ->) ->
      @set "loading", true
      model.call "load", "loaded", (err) =>
        @set "loading", false
        next err, @

    # cached - called only N number of times
    model.load = memoize(model.reload, { maxAge: 1000 * 60 })

    model.save = (next = () ->) ->
      @set "loading", true
      model.call "save", "saved", (err) =>
        @set "loading", false
        next err, @

    unless model.__isCollection
      model.remove = (next = () ->) ->
        model.call "remove", "removed", (err) =>
          @dispose()
          next err, @

    if model._onSave
      model.on "save", model._onSave

    if model._onLoad
      model.on "load", model._onLoad 
