/* Copyright CloudLinux Zug GmbH 2010-2017 All Rights Reserved
 *
 * Licensed under CLOUD LINUX LICENSE AGREEMENT
 * http://cloudlinux.com/docs/LICENSE.TXT
 */

import { ColumnProperties } from '../column';
import { TypeOfUnits } from '../types';

export interface ExtendedColumnProperties extends ColumnProperties{
    icon?: string;
    tooltip?: string;
    additionalCssClass?: string;
    units?: TypeOfUnits;
    objField?: string;
}

// TODO rename 'byteinsec' to 'byte_per_sec'
export const commonColumnsArray: Array<ExtendedColumnProperties> = [
    // SPEED columns
    {
        name: 'usage_cpu_lve', descr: 'A', convertToFormat: 'number', group: 'SPEED',
        units: 'percents', tooltip: 'Sort by Average SPEED'
    },
    {
        name: 'limits_cpu_lve', descr: 'L', convertToFormat: 'number', group: 'SPEED',
        units: 'percents', tooltip: 'Sort by SPEED Limit'
    },
    {
        name: 'usage_cpu_mysql', descr: 'A', convertToFormat: 'number', group: 'SPEED',
        units: 'percents', tooltip: 'Sort by Average MySQL SPEED', icon: 'db_icon.png'
    },
    {
        name: 'limits_cpu_mysql', descr: 'L', convertToFormat: 'number', group: 'SPEED',
        units: 'percents', tooltip: 'Sort by MySQL SPEED Limit', icon: 'db_icon.png'
    },
    {
        name: 'faults_cpu_lve', descr: 'F', convertToFormat: 'number', group: 'SPEED',
        tooltip: 'Sort by SPEED Faults'
    },
    // PMEM columns
    {
        name: 'usage_pmem_lve', descr: 'A', convertToFormat: 'byte-amount', group: 'PMEM',
        units: 'bytes', tooltip: 'Sort by Average PMEM'
    },
    {
        name: 'limits_pmem_lve', descr: 'L', convertToFormat: 'byte-amount', group: 'PMEM',
        units: 'bytes', tooltip: 'Sort by PMEM Limit'
    },
    {
        name: 'faults_pmem_lve', descr: 'F', convertToFormat: 'number', group: 'PMEM',
        tooltip: 'Sort by PMEM Faults'
    },
    // VMEM columns
    {
        name: 'usage_vmem_lve', descr: 'A', convertToFormat: 'byte-amount', group: 'VMEM',
        units: 'bytes', tooltip: 'Sort by Average VMEM'
    },
    {
        name: 'limits_vmem_lve', descr: 'L', convertToFormat: 'byte-amount', group: 'VMEM',
        units: 'bytes', tooltip: 'Sort by VMEM Limit'
    },
    {
        name: 'faults_vmem_lve', descr: 'F', convertToFormat: 'number', group: 'VMEM',
        tooltip: 'Sort by VMEM Faults'
    },
    // IO columns
    {
        name: 'usage_io_lve', descr: 'A', convertToFormat: 'byte-amount', group: 'IO',
        units: 'byteinsec', tooltip: 'Sort by Average IO'
    },
    {
        name: 'limits_io_lve', descr: 'L', convertToFormat: 'byte-amount', group: 'IO',
        units: 'byteinsec', tooltip: 'Sort by IO Limit'
    },
    {
        name: 'usage_io_mysql', descr: 'A', convertToFormat: 'byte-amount', group: 'IO',
        units: 'byteinsec', tooltip: 'Sort by Average MySQL IO', icon: 'db_icon.png'
    },
    {
        name: 'limits_io_mysql', descr: 'L', convertToFormat: 'byte-amount', group: 'IO',
        units: 'byteinsec', tooltip: 'Sort by MySQL IO Limit', icon: 'db_icon.png'
    },
    {
        name: 'faults_io_lve', descr: 'F', convertToFormat: 'number', group: 'IO',
        tooltip: 'Sort by IO Faults'
    },
    // EP column
    {
        name: 'usage_ep_lve', descr: 'A', convertToFormat: 'number', group: 'EP',
        tooltip: 'Sort by Average EP'
    },
    {
        name: 'limits_ep_lve', descr: 'L', convertToFormat: 'number', group: 'EP',
        tooltip: 'Sort by EP Limit'
    },
    {
        name: 'faults_ep_lve', descr: 'F', convertToFormat: 'number', group: 'EP',
        tooltip: 'Sort by EP Faults'
    },
    // NPROC column
    {
        name: 'usage_nproc_lve', descr: 'A', convertToFormat: 'number', group: 'NPROC',
        tooltip: 'Sort by Average NPROC'
    },
    {
        name: 'limits_nproc_lve', descr: 'L', convertToFormat: 'number', group: 'NPROC',
        tooltip: 'Sort by NPROC Limit'
    },
    {
        name: 'faults_nproc_lve', descr: 'F', convertToFormat: 'number', group: 'NPROC',
        tooltip: 'Sort by NPROC Faults'
    },
    // IOPS
    {
        name: 'usage_iops_lve', descr: 'A', convertToFormat: 'number', group: 'IOPS',
        tooltip: 'Sort by Average IOPS'
    },
    {
        name: 'limits_iops_lve', descr: 'L', convertToFormat: 'number', group: 'IOPS',
        tooltip: 'Sort by IOPS Limit'
    },
    {
        name: 'faults_iops_lve', descr: 'F', convertToFormat: 'number', group: 'IOPS',
        tooltip: 'Sort by IOPS Faults'
    }
];

export const shortenColumnsArray: Array<ExtendedColumnProperties> = [
    {
        name: 'cpu_all', descr: 'LVE', convertToFormat: 'number', group: 'SPEED',
        units: 'percents'
    },
    {
        name: 'cpu_mysql', descr: 'MySQL', convertToFormat: 'number', group: 'SPEED',
        units: 'percents'
    },
    {
        name: 'mem', descr: 'MEM', convertToFormat: 'byte-amount',
        units: 'bytes'
    },
    {
        name: 'io_all', descr: 'LVE', convertToFormat: 'byte-amount', group: 'IO',
        units: 'byteinsec'
    },
    {
        name: 'io_mysql', descr: 'MySQL', convertToFormat: 'byte-amount', group: 'IO',
        units: 'byteinsec'
    },
    {
        name: 'iops', descr: 'IOPS', convertToFormat: 'number'
    },
    {
        name: 'pno', descr: 'PNO', convertToFormat: 'number'
    },
    {
        name: 'ep', descr: 'EP', convertToFormat: 'number',
    }
];

export const packageColumnInfo: Array<ExtendedColumnProperties> = [
    {
        name: 'limits_cpu_all', descr: 'SPEED', convertToFormat: 'number',
        units: 'percents'
    },
    {
        name: 'limits_vmem', descr: 'VMEM', convertToFormat: 'byte-amount',
        hidden: true, showEditOrValue: true, units: 'bytes'
    },
    {
        name: 'limits_pmem', descr: 'PMEM', convertToFormat: 'byte-amount',
        units: 'bytes'
    },
    {
        name: 'limits_io_all', descr: 'IO', convertToFormat: 'byte-amount',
        units: 'kbinsec', objField: 'all'
    },
    {
        name: 'limits_iops', descr: 'IOPS', convertToFormat: 'number'
    },
    {
        name: 'limits_ep', descr: 'EP', convertToFormat: 'number'
    },
    {
        name: 'limits_nproc', descr: 'NPROC', convertToFormat: 'number'
    },
    {
        name: 'limits_inodes_hard', descr: 'INODES', convertToFormat: 'number',
        objField: 'hard'
    },
    {
        name: 'limits_inodes_soft', descr: 'INODES', convertToFormat: 'number',
        objField: 'soft', hidden: true
    }
];
