var Component = require('./component');
var Toast = require('./toast');
var Tpl = require('./image-editor.xml');

/**
 * A form to handle the image database, it allows to add new images or
 * replace it.
 **/
module.exports = new Class({
	Extends: Component,
	Properties: {
		/**
		 * The REST connection used to upload the image.
		 **/
		conn: {
			type: Vn.JsonConnection
		}
	},
	
	initialize: function(props) {
		this.builderInitString(Tpl);

		var self = this;
		this.$('form').onsubmit = function()
			{ self._onSubmit(); return false; };

		this.parent(props);
	},
	
	onNameChange: function() {
		var newValue = this.$('name').value;
		
		if (!newValue)
			newValue = null
	
		this.signalEmit('name-changed', newValue);
	},
	
	_onSubmit: function() {
		this.$('hidden-name').value = this.$('name').value;
		this.$('submit').disabled = true;
		this.$('spinner').start();

		this.conn.sendFormMultipart(this.$('form'),
			this._onResponse.bind(this));
	},
	
	_onResponse: function(json, error) {
		this.$('submit').disabled = false;
		this.$('spinner').stop();

		if (error)
			throw error;

		Toast.showMessage(_('ImageAdded'));
		this.signalEmit('file-uploaded', this.$('name').value);
	},
	
	setData: function(image, directory) {
		this.$('name').value = image;
		this.$('schema').value = directory;
	}
});