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;
      });
  }
}
