const BaseItem = require('lib/models/BaseItem');

class ModelCache {

	constructor() {
		this.cache_ = {};
	}

	async byIds(itemType, ids) {
		const ModelClass = BaseItem.getClassByItemType(itemType);
		const output = [];

		const remainingIds = [];
		for (let i = 0; i < ids.length; i++) {
			const id = ids[i];
			if (!this.cache_[id]) {
				remainingIds.push(id);
			} else {
				output.push(this.cache_[id].model);
			}
		}

		const models = await ModelClass.byIds(remainingIds);
		for (let i = 0; i < models.length; i++) {
			this.cache_[models[i].id] = {
				model: models[i],
				timestamp: Date.now(),
			}

			output.push(models[i]);
		}

		return output;
	}

}

module.exports = ModelCache;