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

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

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

	render() {
		const table =
			E('table', { 'class': 'table leases' }, [
				E('tr', { 'class': 'tr table-titles' }, [
					E('th', { 'class': 'th' }, _('Name')),
					E('th', { 'class': 'th' }, _('Interface')),
					E('th', { 'class': 'th' }, _('Active State')),
					E('th', { 'class': 'th' }, _('Initial 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) {
				const targets = Array.isArray(instancesInfo.status) ? instancesInfo.status : [];
				const instances = uci.sections('keepalived', 'vrrp_instance');

				cbi_update_table(table,
					targets.map(function(target) {
						let state;
						let state_initial;
						const instance_state = target.data.state;

						if (instance_state === 2) {
							state = 'MASTER';
						} else if (instance_state === 1) {
							state = 'BACKUP';
						} else if (instance_state === 0) {
							state = 'INIT';
						} else if (instance_state === 3) {
							state = 'FAULT';
						} else {
							state = 'UNKNOWN';
						}

						if (instances != '') {
							for (var i = 0; i < instances.length; i++) {
								if (instances[i]['name'] == target.data.iname) {
									state_initial = instances[i]['state'];
									break;
								}
							}
						}
						return  [
							target.data.iname,
							target.data.ifp_ifname,
							state,
							state_initial,
							target.stats.advert_sent,
							target.stats.advert_rcvd,
							new Date(target.data.last_transition * 1000)
						];
					}),
					E('em', _('There are no active instances'))
				);
			});
		});

		return E('div', {'class': 'cbi-map'}, [
			E('h2', _('VRRP')),
			E('div', {'class': 'cbi-map-descr'}, _('This overview shows the current status of the VRRP instances on this device.')),
			E('div', { 'class': 'cbi-section' }, table)
		]);
	},

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