import {ActivatedRoute, Router} from "@angular/router";
import {Component, Input} from "@angular/core";
import {Session, UserPasswordResetRequestDto, UserService} from "@webbpm/base-package";
import {Observable} from "rxjs";

@Component({
             moduleId: module.id,
             selector: "newPassword",
             templateUrl: "../../../../../src/resources/template/app/component/new_password.html"
           })
export class NewPasswordComponent {
  public currentSession: Observable<Session>;

  private token: string;

  @Input()
  public password: string;
  public passwordType: boolean;

  @Input()
  public confirmPassword: string;
  public confirmPasswordType: boolean;

  @Input()
  public errorMessage: string;

  constructor(private router: Router, private userService: UserService,
              private route: ActivatedRoute) {
    this.currentSession = this.userService.getCurrentSession();
  }

  ngOnInit() {
    this.token = this.route.snapshot.queryParamMap.get("token");

    this.router.navigate([], {relativeTo: this.route, replaceUrl: true});

    if (this.token == undefined || this.token === '') {
      this.errorMessage = 'Ссылка недействительна. Требуется повторить восстановление пароля.';
      return;
    }
  }

  public changePassword(): void {
    let dto: UserPasswordResetRequestDto = new UserPasswordResetRequestDto();
    dto.password = this.password;
    dto.passwordConfirm = this.confirmPassword;
    this.userService.changePassword(dto, this.token)
        .then(() => this.router.navigateByUrl("/"),
              () => {
                this.errorMessage =
                    'Произошла неизвестная ошибка, обратитесь в службу технической поддержки!';
              });
  }

  togglePasswordType(): void {
    this.passwordType = !this.passwordType;
  }

  toggleConfirmPasswordType(): void {
    this.confirmPasswordType = !this.confirmPasswordType;
  }

  validPasswords(): boolean {
    if (this.password === undefined || this.confirmPassword === undefined) {
      return false;
    }

    let eq = this.password === this.confirmPassword;
    if (!eq) {
      this.errorMessage = 'Введенные пароли не совпадают. Убедитесь, что данные, ' +
                          'введенные в поле "Подтверждение пароля", совпадают с теми, ' +
                          'которые указаны в поле "Пароль".';
    }
    else {
      this.errorMessage = '';
    }
    return eq;
  }
}
