var SqlObject = require('./object');

/**
 * List of Sql.Object
 */
module.exports = new Class({
	Extends: SqlObject

	,objects: []

	,add(object) {
		this.objects.push(object.ref());
		object.on('changed', this._onObjectChange, this);
		this._onObjectChange();
	}
	
	,get(i) {
		return objects[i];
	}
	
	,getArray() {
		return this.objects;
	}
	
	,remove(i) {
		this._unrefObject(this.objects.splice(i, 1));
		this._onObjectChange();
	}

	,_onObjectChange() {
		this.emit('changed');
	}

	,isReady() {
		var o = this.objects;
		
		if (o.length == 0)
			return false;
	
		for (var i = 0; i < o.length; i++)
		if (!o[i].isReady())
			return false;

		return true;
	}

	,findHolders() {
		let ids = [];

		for (const object of this.objects){
			holders = object.findHolders();
			if (holders) ids = ids.concat(holders);
		}

		return ids;
	}
	
	,_unrefObject(object) {
		object.disconnect('changed', this._onObjectChange, this);
		object.unref();
	}
	
	,_destroy() {
		for (var i = 0; i < this.objects.length; i++)
			this._unrefObject(this.objects[i]);
			
		SqlObject.prototype._destroy.call(this);
	}
});