import { CommonModule } from '@angular/common'; import { Component } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { APP_ICONS } from '../../utils/fontawesome-icons'; import { AuthService } from '../../services/auth.service'; import { LoadingService } from '../../services/loading.service'; @Component({ selector: 'app-login-register', standalone: true, imports: [CommonModule, FormsModule, FontAwesomeModule, RouterModule], templateUrl: './login-register.component.html', }) export class LoginRegisterComponent { email: string = ''; password: string = ''; confirmPassword: string = ''; isLoginMode: boolean = true; // true: Login, false: Registration errorMessage: string = ''; envelope = APP_ICONS.faEnvelope; lock = APP_ICONS.faLock; arrowRight = APP_ICONS.faArrowRight; userplus = APP_ICONS.faUserPlus; constructor(private authService: AuthService, private route: ActivatedRoute, private router: Router, private loadingService: LoadingService) {} ngOnInit(): void { // Set mode based on query parameter "mode" this.route.queryParamMap.subscribe(params => { const mode = params.get('mode'); this.isLoginMode = mode !== 'register'; }); } toggleMode(): void { this.isLoginMode = !this.isLoginMode; this.errorMessage = ''; } // Login with Email onSubmit(): void { this.errorMessage = ''; if (this.isLoginMode) { this.authService .loginWithEmail(this.email, this.password) .then(userCredential => { console.log('Successfully logged in:', userCredential); this.router.navigate([`myListing`]); }) .catch(error => { console.error('Error during email login:', error); this.errorMessage = error.message; }); } else { // Registration mode: also check if passwords match if (this.password !== this.confirmPassword) { console.error('Passwords do not match'); this.errorMessage = 'Passwords do not match.'; return; } this.loadingService.startLoading('googleAuth'); this.authService .registerWithEmail(this.email, this.password) .then(userCredential => { console.log('Successfully registered:', userCredential); this.loadingService.stopLoading('googleAuth'); this.router.navigate(['emailVerification']); }) .catch(error => { this.loadingService.stopLoading('googleAuth'); console.error('Error during registration:', error); if (error.code === 'auth/email-already-in-use') { this.errorMessage = 'This email address is already in use. Please try logging in.'; } else { this.errorMessage = error.message; } }); } } // Login with Google loginWithGoogle(): void { this.errorMessage = ''; this.authService .loginWithGoogle() .then(userCredential => { console.log('Successfully logged in with Google:', userCredential); this.router.navigate([`myListing`]); }) .catch(error => { console.error('Error during Google login:', error); this.errorMessage = error.message; }); } }