import Defaults from '../defaults';
import { default as URLScheme, URLSchemeParams } from './url_scheme';

function getGenericURL(
  baseScheme: string,
  params: URLSchemeParams,
  path: string
): string {
  var scheme = baseScheme + (params.useTLS ? 's' : '');
  var host = params.useTLS ? params.hostTLS : params.hostNonTLS;
  return scheme + '://' + host + path;
}

function getGenericPath(key: string, queryString?: string): string {
  var path = '/app/' + key;
  var query =
    '?protocol=' +
    Defaults.PROTOCOL +
    '&client=js' +
    '&version=' +
    Defaults.VERSION +
    (queryString ? '&' + queryString : '');
  return path + query;
}

export var ws: URLScheme = {
  getInitial: function(key: string, params: URLSchemeParams): string {
    var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');
    return getGenericURL('ws', params, path);
  }
};

export var http: URLScheme = {
  getInitial: function(key: string, params: URLSchemeParams): string {
    var path = (params.httpPath || '/pusher') + getGenericPath(key);
    return getGenericURL('http', params, path);
  }
};

export var sockjs: URLScheme = {
  getInitial: function(key: string, params: URLSchemeParams): string {
    return getGenericURL('http', params, params.httpPath || '/pusher');
  },
  getPath: function(key: string, params: URLSchemeParams): string {
    return getGenericPath(key);
  }
};
