_ = require 'lodash'

class Cache
	constructor: (options) ->
		@options = _.defaults options, 
			max: 500

		@ips = {}
		@access = {}

	set: (data) ->
		data.info.fromCache = true

		# @ips[data.info.ip] = @ips[data.info.ip] or []
		# @ips[data.info.ip].push(data)

		# @ips[data.info.ip] = _.sortByOrder @ips[data.info.ip], ['rating', 'time'], [true, false]
		@ips[data.info.ip] = data

		@manage()

	get: (ip, callback) ->
		entry = @ips[ip]

		if not entry
			return callback(null, null) 
		
		@access[ip] = Date.now()

		callback(null, entry)

	manage: () ->
		if @ips.length >= @options.max
			oldestIp = null
			oldestAccess = Date.now()

			for ip, lastAccess of @access
				if lastAccess < oldestAccess
					oldestAccess = lastAccess
					oldestIp = ip

			delete @access[ip]
			delete @ips[ip]

module.exports = Cache