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);
  }
};
