Ext.define('PageCalibration', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.pageCalibration',

    layout: {
	type: 'hbox',
	align: 'stretch',
	pack: 'start',
    },

    getValues: function() {
	let me = this;

	let values = {};

	Ext.Array.each(me.query('[isFormField]'), function(field) {
	    if (field.isValid()) {
		let data = field.getSubmitData();
		Ext.Object.each(data, function(name, val) {
		    let parsed = parseFloat(val, 10);
		    values[name] = isNaN(parsed) ? val : parsed;
		});
	    }
	});

	if (values.d_x === undefined) { return; }
	if (values.d_y === undefined) { return; }
	if (values.s_x === undefined) { return; }
	if (values.s_y === undefined) { return; }

	scalex = 100/values.d_x;
	scaley = 100/values.d_y;

	let offsetx = ((50 - values.s_x) - (50*scalex - 50))/scalex;
	let offsety = ((50 - values.s_y) - (50*scaley - 50))/scaley;

	return {
	    scalex: scalex,
	    scaley: scaley,
	    offsetx: offsetx,
	    offsety: offsety,
	};
    },

    controller: {
	xclass: 'Ext.app.ViewController',

	control: {
	    'field': {
		change: function() {
		    let view = this.getView();
		    let param = view.getValues();
		    view.fireEvent("calibrationchanged", param);
		},
	    },
	},
    },

    items: [
	{
	    border: false,
	    layout: {
		type: 'vbox',
		align: 'stretch',
		pack: 'start',
	    },
	    items: [
		{
		    xtype: 'displayfield',
		    value: 'a4',
		    fieldLabel: 'Start Offset Sx (mm)',
		    labelWidth: 150,
		    value: 50,
		},
		{
		    xtype: 'displayfield',
		    value: 'a4',
		    fieldLabel: 'Length Dx (mm)',
		    labelWidth: 150,
		    value: 100,
		},
		{
		    xtype: 'displayfield',
		    value: 'a4',
		    fieldLabel: 'Start Offset Sy (mm)',
		    labelWidth: 150,
		    value: 50,
		},
		{
		    xtype: 'displayfield',
		    value: 'a4',
		    fieldLabel: 'Length Dy (mm)',
		    labelWidth: 150,
		    value: 100,
		},
	    ],
	},
	{
	    border: false,
	    margin: '0 0 0 20',
	    layout: {
		type: 'vbox',
		align: 'stretch',
		pack: 'start',
	    },
	    items: [
		{
		    xtype: 'numberfield',
		    value: 'a4',
		    name: 's_x',
		    fieldLabel: 'Meassured Start Offset Sx (mm)',
		    allowBlank: false,
		    labelWidth: 200,
		},
		{
		    xtype: 'numberfield',
		    value: 'a4',
		    name: 'd_x',
		    fieldLabel: 'Meassured Length Dx (mm)',
		    allowBlank: false,
		    labelWidth: 200,
		},
		{
		    xtype: 'numberfield',
		    value: 'a4',
		    name: 's_y',
		    fieldLabel: 'Meassured Start Offset Sy (mm)',
		    allowBlank: false,
		    labelWidth: 200,
		},
		{
		    xtype: 'numberfield',
		    value: 'a4',
		    name: 'd_y',
		    fieldLabel: 'Meassured Length Dy (mm)',
		    allowBlank: false,
		    labelWidth: 200,
		},
	    ],
	},
    ],
});