Ext.define('PBS.data.PermissionPathsStore', {
    extend: 'Ext.data.Store',
    alias: 'store.pbsPermissionPaths',
    fields: ['value'],
    autoLoad: false,
    data: [
	{ 'value': '/' },
	{ 'value': '/access' },
	{ 'value': '/access/acl' },
	{ 'value': '/access/users' },
	{ 'value': '/datastore' },
	{ 'value': '/remote' },
	{ 'value': '/system' },
	{ 'value': '/system/disks' },
	{ 'value': '/system/log' },
	{ 'value': '/system/network' },
	{ 'value': '/system/network/dns' },
	{ 'value': '/system/network/interfaces' },
	{ 'value': '/system/services' },
	{ 'value': '/system/status' },
	{ 'value': '/system/tasks' },
	{ 'value': '/system/time' },
	{ 'value': '/tape' },
	{ 'value': '/tape/device' },
	{ 'value': '/tape/pool' },
	{ 'value': '/tape/job' },
    ],

    constructor: function(config) {
	let me = this;

	config = config || {};
	me.callParent([config]);

	// TODO: this is but a HACK until we have some sort of resource
	// storage like PVE
	let datastores = Ext.data.StoreManager.lookup('pbs-datastore-list');

	if (datastores) {
	    let donePaths = {};
	    me.suspendEvents();
	    datastores.each(function(record) {
		let path = `/datastore/${record.data.store}`;
		if (path !== undefined && !donePaths[path]) {
		    me.add({ value: path });
		    donePaths[path] = 1;
		}
	    });
	    me.resumeEvents();

	    me.fireEvent('refresh', me);
	    me.fireEvent('datachanged', me);
	}

	me.sort({
	    property: 'value',
	    direction: 'ASC',
	});
    },
});

Ext.define('PBS.form.PermissionPathSelector', {
    extend: 'Ext.form.field.ComboBox',
    xtype: 'pbsPermissionPathSelector',
    mixins: ['Proxmox.Mixin.CBind'],

    valueField: 'value',
    displayField: 'value',
    cbind: {
	typeAhead: '{editable}',
    },
    anyMatch: true,
    queryMode: 'local',

    store: {
	type: 'pbsPermissionPaths',
    },
    regexText: gettext('Invalid permission path.'),
    regex: /\/((access|datastore|remote|system)\/.*)?/,
});
