import { OptionalFieldProperties } from '../types';
import { Validator } from '../validator';

type fieldPropertiesMap = {[id: string]: OptionalFieldProperties};

let commonProperties: fieldPropertiesMap = {
    'limits_vmem': {
        paramName: 'vmem',
        placeHolder: 'vmem',
        editing: true,
        requirements: [{'m': Validator.isMemory}],
        tooltipText: 'Use postfix if it is needed. ' +
        'For example: 1024[K|M|G]. By default used "K".'
    },
    'limits_pmem': {
        placeHolder: 'pmem',
        editing: true,
        paramName: 'pmem',
        requirements: [{'m': Validator.isMemory}],
        tooltipText: 'Use postfix if it is needed. ' +
        'For example: 1024[K|M|G]. By default used "K".'
    },
    'limits_ep': {
        placeHolder: 'ep',
        editing: true,
        paramName: 'maxEntryProcs',
        requirements: [{'m': Validator.isNotNegativeNumber}]
    },
    'limits_nproc': {
        placeHolder: 'nproc',
        editing: true,
        paramName: 'nproc',
        requirements: [{'m': Validator.isNotNegativeNumber}]
    },
    'limits_iops': {
        placeHolder: 'iops',
        editing: true,
        paramName: 'iops',
        requirements: [{'m': Validator.isNotNegativeNumber}]
    },
    'limits_inodes_soft': {
        paramName: 'inodes_soft',
        placeHolder: 'soft',
        editing: true,
        isProtected: true,
        requirements: [{'m': Validator.isNotNegativeNumber}]
    },
    'limits_inodes_hard': {
        paramName: 'inodes_hard',
        placeHolder: 'hard',
        editing: true,
        isProtected: true,
        requirements: [{'m': Validator.isNotNegativeNumber}]
    }
};

export let packageProperties: fieldPropertiesMap = Object.assign({
    'package_name': {},
    'provider': {},
    'limits_cpu_all': {
        paramName: 'speed',
        editing: true,
        requirements: [
            {'m': Validator.isRequired},
            {'m': Validator.isCpuValue},
        ],
        tooltipText: 'Use postfix if it is needed. ' +
        'For example: 1024[Mhz|Ghz|%]. By default used "%".'
    },
    'limits_io_all': {
        placeHolder: 'io',
        paramName: 'io',
        editing: true,
        requirements: [{'m': Validator.isSpeed}],
        tooltipText: 'Use postfix if it is needed. ' +
        'For example: 1024[KB/s|MB/s|G/s]. By default used "KB/s".'
    }
}, commonProperties);

export let userProperties: fieldPropertiesMap = Object.assign({
    'id': {},
    'username': {},
    'package': {}
}, commonProperties);
