/*
 * Copyright (c) 2016 Swift Navigation Inc.
 * Contact: engineering@swiftnav.com
 *
 * This source is subject to the license found in the file 'LICENSE' which must
 * be be distributed together with this source. All other rights reserved.
 *
 * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
 * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
 */

declare module "pondjs" {
  var Aggregator: any;
  var BoundedIn: any;
  var Collapser: any;
  var Collection: any;
  var CollectionOut: any;
  var Collector: any;
  var Converter: any;
  var EventOut: any;
  var Filter: any;
  var Index: any;
  var IndexedEvent: any;
  var Mapper: any;
  var Observable: any;
  var Offset: any;
  var Pipeline: any;
  var PipelineIn: any;
  var PipelineOut: any;
  var Processor: any;
  var Runner: any;
  var Selector: any;
  var Taker: any;
  var TimeRangeEvent: any;
  var TimeSeries: any;
  var UnboundedIn: any;

  class TimeRange {
    constructor(arg1: any, arg2: any);
    within(other: TimeRange);
    duration(): number;
  }

  class Event {
    constructor(arg1: any, arg2: any);
    toJSON(): Object;
    toString(): string;
    toPoint(): [any];
    timestampAsUTCString(): string;
    timestampAsLocalString(): string;
    timestamp(): Date;
    begin(): Date;
    end(): Date;
    data(): Immutable.Map<any, any>;
    setData(data: Object): Event;
    value(fieldSpec:any): Object;
    stringify(): string;
    collapse(fieldSpecList: [string], name: string,
             reducer: any , append: boolean);
    static is(event1: Event, event2: Event): boolean;
    static isValidValue(event: Event, fieldSpec: string): boolean;
    static selector(event: Event , fieldSpec: string): Event;
    static mergeEvents(events: [Event]): Event;
    static mergeTimeRangeEvents(events: [Event]): any;
    static mergeIndexedEvents(events: [Event]): any;
    static merge(events: [Event]): any;
    static combine(events: [Event], fieldSpec: string, reducer: any): Event;
    static sum(events: [Event], fieldSpec: string): any;
    static avg(events: [Event], fieldSpec: string): any;
    static map(evts: [Event], multiFieldSpec: string): [Event];
    static reduce(mapped: any, reducer: any): any;
    static mapReduce(events: [Event], multiFieldSpec: [string], reducer: any): any;
  }
}
