import {Pipe, PipeTransform} from '@angular/core';
import {DatePipe, DecimalPipe} from '@angular/common';
import {StringHelper} from '../helpers/string-helper';

@Pipe({
    name: 'format'
})
export class FormatPipe implements PipeTransform  {

    private datePipe: DatePipe;
    private decimalPipe: DecimalPipe;

    constructor(){
        this.datePipe = new DatePipe('en-US');
        this.decimalPipe = new DecimalPipe('en-US');
    }

    transform(input:string, args:any): any {
        var format = '';
        var parsedFloat = 0;
        var pipeArgs = args.split(':');
        for(var i = 0; i < pipeArgs.length; i++){
            pipeArgs[i] = pipeArgs[i].trim(' ');
        }

        //Escape all html if not explicitly set
        if(pipeArgs[0].toLowerCase() !== 'html')
            input = StringHelper.escapeHtml(input);

        switch(pipeArgs[0].toLowerCase()) {
            case 'text':
                return input;
            case 'decimal':
            case 'number':
                parsedFloat = !isNaN(parseFloat(input)) ? parseFloat(input) : 0;
                format = pipeArgs.length > 1 ? pipeArgs[1] : null;
                return this.decimalPipe.transform(parsedFloat, format);
            case 'percentage':
                parsedFloat = !isNaN(parseFloat(input)) ? parseFloat(input) : 0;
                format = pipeArgs.length > 1 ? pipeArgs[1] : null;
                return this.decimalPipe.transform(parsedFloat, format) + '%';
            case 'date':
            case 'datetime':
                var date = !isNaN(parseInt(input)) ? parseInt(input) : new Date(input);
                format = 'MMM d, y h:mm:ss a';
                if(pipeArgs.length > 1)
                {
                    format = '';
                    for(var i = 1; i < pipeArgs.length; i++){
                        format += pipeArgs[i];
                    }
                }
                return this.datePipe.transform(date, format);
            default:
                return input;
        }
    }
}

export var FORMAT_PROVIDERS = [
    FormatPipe
];