import { Pipe, PipeTransform } from '@angular/core';

@Pipe({ name: 'ipSort' })
export class IPSort implements PipeTransform {
  transform(array: any[], field: string): any[] {
    array.sort((a: any, b: any) => {
      a = this.ip2num(a[field]);
      b = this.ip2num(b[field]);
      if (a < b) {
        return -1;
      } else if (a > b) {
        return 1;
      } else {
        return 0;
      }
    });
    return array;
  }

  ip2num(ip: string): number {
    return ip.split('.').map((octet, index, array) => {
      // tslint:disable-next-line:radix
      return parseInt(octet) * Math.pow(256, (array.length - index - 1));
    }).reduce((prev, curr) => {
      return prev + curr;
    });
  }
}
