import FirstFactorValidator = require("./FirstFactorValidator");
import JSLogger = require("js-logger");
import UISelectors = require("./UISelectors");
import { Notifier } from "../Notifier";
import { QueryParametersRetriever } from "../QueryParametersRetriever";
import Constants = require("../../../../shared/constants");
import Endpoints = require("../../../../shared/api");
import UserMessages = require("../../../../shared/UserMessages");

export default function (window: Window, $: JQueryStatic,
  firstFactorValidator: typeof FirstFactorValidator, jslogger: typeof JSLogger) {

  const notifier = new Notifier(".notification", $);

  function onFormSubmitted() {
    const username: string = $(UISelectors.USERNAME_FIELD_ID).val() as string;
    const password: string = $(UISelectors.PASSWORD_FIELD_ID).val() as string;
    $(UISelectors.PASSWORD_FIELD_ID).val("");

    const redirectUrl = QueryParametersRetriever.get(Constants.REDIRECT_QUERY_PARAM);
    firstFactorValidator.validate(username, password, redirectUrl, $)
      .then(onFirstFactorSuccess, onFirstFactorFailure);
    return false;
  }

  function onFirstFactorSuccess(redirectUrl: string) {
    window.location.href = redirectUrl;
  }

  function onFirstFactorFailure(err: Error) {
    notifier.error(UserMessages.AUTHENTICATION_FAILED);
  }

  $(window.document).ready(function () {
    $("form").on("submit", onFormSubmitted);
  });
}