import {Component, OnDestroy, OnInit} from '@angular/core';
import {User} from "../../model/user";
import {Router} from "@angular/router";
import { AuthenticationService } from 'src/app/service/authentication.service';
;

import {NotificationService} from "../../service/notification.service";
import {Subscription} from "rxjs";
import {HttpErrorResponse} from "@angular/common/http";
import {NotificationType} from "../../notification/notification-type";

@Component({
  selector: 'app-register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.css']
})
export class RegisterComponent implements OnInit, OnDestroy {

  public showLoading: boolean;
  private subscriptions: Subscription[] = [];

  constructor(private router: Router,
              private authenticationService: AuthenticationService,
              private notificationService: NotificationService) {
  }

  ngOnInit(): void {
    if (this.authenticationService.isUserLoggedIn()) {
      this.router.navigateByUrl("/dashboard/userManagement");
      this.notificationService.notify(NotificationType.INFO, "You are already logged in");
    }
  }

  public onRegister(user: User) {
    this.showLoading = true;

    let subscription = this.authenticationService
      .register(user)
      .subscribe(user => {
          this.notificationService.notify(NotificationType.SUCCESS, `A new account was created for ${user.firstName}.
          Please check your email for password to log in`);
          this.router.navigateByUrl('/dashboard/login');
          this.showLoading = false;
        },
        (errorResponse: HttpErrorResponse) => {
          this.sendErrorNotification(errorResponse.error.message);
          this.showLoading = false;
        }
      );

    this.subscriptions.push(subscription);
  }

  ngOnDestroy(): void {
    this.subscriptions.forEach(sub => sub.unsubscribe());
  }

  private sendErrorNotification(message: string) {
    this.notificationService.notify(NotificationType.ERROR, message ? message : 'An error occurred. Please try again')
  }
}
