'use strict';
'require view';
'require form';
'require uci';
'require rpc';
'require poll';

var callKeepalivedStatus = rpc.declare({
	object: 'keepalived',
	method: 'dump',
	expect: {  },
});

return view.extend({
	load: function() {
		return Promise.all([
			uci.load('keepalived'),
		]);
	},

	render: function() {
		var table =
			E('table', { 'class': 'table lases' }, [
				E('tr', { 'class': 'tr table-titles' }, [
					E('th', { 'class': 'th' }, _('Name')),
					E('th', { 'class': 'th' }, _('Interface')),
					E('th', { 'class': 'th' }, _('Active State/State')),
					E('th', { 'class': 'th' }, _('Probes Sent')),
					E('th', { 'class': 'th' }, _('Probes Received')),
					E('th', { 'class': 'th' }, _('Last Transition')),
					E([])
				])
			]);

		poll.add(function() {
			return callKeepalivedStatus().then(function(instancesInfo) {
				var targets = Array.isArray(instancesInfo.status) ? instancesInfo.status : [];
				var instances = uci.sections('keepalived', 'vrrp_instance');

				cbi_update_table(table,
					targets.map(function(target) {
						var state = (target.stats.become_master - target.stats.release_master) ? 'MASTER' : 'BACKUP';
						if (instances != '') {
							for (var i = 0; i < instances.length; i++) {
								if (instances[i]['name'] == target.data.iname) {
									state = state + '/' + instances[i]['state'];
									break;
								}
							}
						}
						return  [ 
							target.data.iname,
							target.data.ifp_ifname,
							state,
							target.stats.advert_sent,
							target.stats.advert_rcvd,
							new Date(target.data.last_transition * 1000)
						];	
					}),
					E('em', _('There are no active instances'))
				);
			});
		});

		return E([
			E('h3', _('Keepalived Instances Status')),
			E('br'),
			table
		]);
	},

	handleSave: null,
	handleSaveApply:null,
	handleReset: null
});
