
var Connection = require ('./connection');
var Model = require ('./model');

module.exports = new Class
({
	Extends: Vn.Form
	,Tag: 'db-lot'
	,Properties:
	{
		/**
		 * The connection used to execute the statement.
		 */
		conn:
		{
			type: Connection
			,set: function (x)
			{
				this.model.conn = x;
			}
			,get: function ()
			{
				return this.model.conn;
			}
		},
		/**
		 * The model query.
		 */
		query:
		{
			type: String
			,set: function (x)
			{
				this.model.query = x;
			}
			,get: function ()
			{
				return this.model.query;
			}
		},
		/**
		 * The model select statement.
		 */
		stmt:
		{
			type: Sql.Stmt
			,set: function (x)
			{
				this.model.stmt = x;
			}
			,get: function ()
			{
				return this.model.stmt;
			}
		},
		/**
		 * The lot used to execute the statement.
		 */
		lot:
		{
			type: Vn.Lot
			,set: function (x)
			{
				this.model.lot = x;
			}
			,get: function ()
			{
				return this.model.lot;
			}
		}
	}

	,initialize: function (props)
	{
		this.model = new Model ();
		this.parent (props);
	}

	,appendChild: function (child)
	{
		if (child.nodeType === Node.TEXT_NODE)
			this.query = child.textContent;
	}
	
	,refresh: function ()
	{
		if (this._model)
			this._model.refresh ();
	}
	
	,performOperations: function ()
	{
		if (this._model)
			this._model.performOperations ();
	}
	
	/**
	 * Get the index of the column from its name.
	 *
	 * @param {string} columnName The column name
	 * @return {integer} The column index or -1 if column not exists
	 */
	,getColumnIndex: function (columnName)
	{
		return this._model ?
			this._model.getColumnIndex (columnName) : -1;
	}

	/**
	 * Gets a value from the form using the column index.
	 *
	 * @param {string} columnName The column index
	 * @return {Object} The value
	 */
	,getByIndex: function (column)
	{
		return this._model.getByIndex (this._row, column);
	}

	/**
	 * Sets a value on the form using the column index.
	 *
	 * @param {string} columnName The column index
	 * @param {Object} value The new value
	 */
	,setByIndex: function (column, value)
	{
		return this._model.setByIndex (this._row, column, value);
	}
});
