import { Observable } from 'rxjs/Observable';
// Webpack doesn't bundle correctly without this. TODO: figure out why & fix.
import 'rxjs/add/observable/bindNodeCallback';
import 'rxjs/add/observable/bindCallback';

export interface SocketOptions {
  event: string;
  payload?: any;
}

const emit = Observable.bindNodeCallback((options: SocketOptions, callback: (err: Error, data: any) => void) => {
  window.socket.emit(options.event, options.payload || {}, callback);
});

const on = Observable.bindCallback((options: SocketOptions, callback: (data: any) => void) => {
  window.socket.on(options.event, callback);
});

export const Socket = {
  emit,
  on
};

export interface HttpOptions {
  url: string;
  payload?: any;
}

const get = Observable.bindNodeCallback((url: string, callback: (data: any) => void) => {
  window.ajaxify.loadData(url, callback);
});