import { Formatter, Column } from 'angular-slickgrid';

    export const ekThousandSeparatorFormatter: Formatter = (row: number, cell: number, value: any,
        columnDef: Column, dataContext: any, grid: any) => {
        // const isNumber = (value === null || value === undefined || value === '') ? false : !isNaN(+value);
        const params = columnDef.params || {};
        const minDecimal = params ? params['minDecimalPlaces'] : undefined;
        const maxDecimal = params ? params['maxDecimalPlaces'] : undefined;
        // const displayNegativeNumberWithParentheses =
        // getValueFromParamsOrGridOptions('displayNegativeNumberWithParentheses', columnDef, grid, false);

        // // @deprecated: decimalPlaces, minDecimalPlaces, maxDecimalPlaces
        // // add these extra checks to support previous way of passing the decimal count
        // if ((params.minDecimalPlaces !== null && params.minDecimalPlaces) || (params.decimalPlaces !== null && params.decimalPlaces)) {
        //   minDecimal = (params.minDecimalPlaces !== null && params.minDecimalPlaces) ||
        //   (params.decimalPlaces !== null && params.decimalPlaces);
        // }
        // if (params.maxDecimalPlaces !== null && params.maxDecimalPlaces) {
        //   maxDecimal = (params.maxDecimalPlaces !== null && params.maxDecimalPlaces);
        // }

        // if (isNumber) {
        //   return formatNumber(value, minDecimal, maxDecimal, displayNegativeNumberWithParentheses);
        // }
        // return value;
        return numberWithCommas(value, minDecimal, maxDecimal);
      };

      export function numberWithCommas(input: number | string, minDecimal?: number, maxDecimal?: number) {
        if (input === undefined || input === null || input === '') { return ''; }
        if (isNaN(+input)) {
            return 'NaN';
        }
        let count = 0;
        const valStr = String(input);
        const parts = valStr.split('.');

        let parts1 = parts[0];
        let parts2 = '';
        if (parts.length === 2) {
            parts2 = parts[1];
        }

        // if (maxDecimal) {
        //     let x = 1;
        // }

        // if (maxDecimal === 0) {
        //     let x = 1;
        // }

        // if (maxDecimal <= 0) {
        //     let x = 1;
        // }

        // if (maxDecimal > 0) {
        //     let x = 1;
        // }

        if (minDecimal && minDecimal > parts2.length) {
            while (minDecimal > parts2.length) { parts2 += '0'; }
        }

        if (maxDecimal && maxDecimal > 0 && maxDecimal < parts2.length) {
            const lastDigit = parseInt(parts2[maxDecimal]);
            let last2ndDigit = parseInt(parts2[maxDecimal - 1]);

            if (lastDigit >= 5) { last2ndDigit += 1; }

            parts2 = parts2.substr(0, maxDecimal - 1) + last2ndDigit.toString();
        }

        if (maxDecimal === 0 && parts2.length > 0) {
            const lastDigit = parseInt(parts2[0]);
            let last2ndDigit = parseInt(parts1[parts1.length - 1]);

            if (lastDigit >= 5) { last2ndDigit += 1; }

            parts1 = parts1.substr(0, parts1.length - 1) + last2ndDigit.toString();
            parts2 = '';
        }

        let result = parts2 === '' ? '' : '.' + parts2;
        for (let i = parts1.length - 1; i >= 0; i--) {
            count++;
            result = parts1[i] + result;
            if (count === 3) {
                if (i > 0 && parts1[i - 1] !== '-') { result = ',' + result; }
                count = 0;
                }
            }

        return result;
    }
