'use strict';
'require form';
'require fs';
'require rpc';
'require ui';
'require view';

var mapdata = { actions: {} };

var mibDownload = rpc.declare({
	object: 'file',
	method: 'read',
	params: [ 'path' ],
	expect: { data : '' },
});

return L.view.extend({
	handleMIB: function(name) {
		const base = '/usr/share/snmp/mibs/';
		const fileName = name;
		const a = document.createElement('a');

		document.body.appendChild(a);
		a.style.display = 'none';

		return mibDownload(base + fileName).then(function(res) {
			const data = res;
			const file = new Blob( [data] , { type: 'text/plain'});
			const fileUrl = window.URL.createObjectURL(file);

			a.href = fileUrl;
			a.download = fileName;
			a.click();
			window.URL.revokeObjectURL(fileUrl);
			document.body.removeChild(a);
		});
	},

	load: function() {
		return Promise.all([
			L.resolveDefault(fs.list('/usr/share/snmp/mibs/'), [])
			.then(function(entries) {
				const files = [];
				entries.forEach((elem) => {
					if (elem.type == 'file' &&
					elem.name.match(/MIB\.(mib|my|txt)$/i)) {
						files.push(elem.name);
					}
				});
				return files;
			})
		]);
	},

	render: function(data) {
		let m, s, o, ss;
		const files = data[0];

		m = new form.JSONMap(mapdata, _('SNMP - MIB Download'),
			'Here you can download SNMP-MIB files');

		s = m.section(form.NamedSection, 'actions', _('Actions'));

		o = s.option(form.SectionValue, 'actions',
			form.NamedSection, 'actions', 'actions',
			_('Download Area'));

		ss = o.subsection;

		files.forEach((elem) => {
			o = ss.option(form.Button, 'dl_mib', _(elem));
			o.inputstyle = 'action important';
			o.inputtitle = _('Download');
			o.onclick = ui.createHandlerFn(this, this.handleMIB, elem);
		});

		return m.render();
	},

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