import BluebirdPromise = require("bluebird");
import Endpoints = require("../../../../shared/api");
import Constants = require("../../../../shared/constants");
import Util = require("util");

export function validate(username: string, password: string,
  redirectUrl: string, $: JQueryStatic): BluebirdPromise<string> {
  return new BluebirdPromise<string>(function (resolve, reject) {
    let url: string;
    if (redirectUrl != undefined) {
      const redirectParam = Util.format("%s=%s", Constants.REDIRECT_QUERY_PARAM, redirectUrl);
      url = Util.format("%s?%s", Endpoints.FIRST_FACTOR_POST, redirectParam);
    }
    else {
      url = Util.format("%s", Endpoints.FIRST_FACTOR_POST);
    }

    $.ajax({
      method: "POST",
      url: url,
      data: {
        username: username,
        password: password,
      }
    })
      .done(function (data: { redirect: string }) {
        resolve(data.redirect);
      })
      .fail(function (xhr: JQueryXHR, textStatus: string) {
        reject(new Error("Authetication failed. Please check your credentials."));
      });
  });
}