import { ErrorHandler, inject, Injectable } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';
import { LoggerService } from '@app/infrastructure/shared/logger.service';

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
  // On utilise inject() pour éviter les soucis de dépendance circulaire dans le constructeur
  private logger = inject(LoggerService);

  handleError(error: any): void {
    let message = '';
    let stackTrace = '';

    if (error instanceof HttpErrorResponse) {
      // Erreur serveur
      message = `Erreur Serveur: ${error.status} ${error.message}`;
    } else if (error instanceof Error) {
      // Erreur Client (JavaScript)
      message = `Erreur Client: ${error.message}`;
      stackTrace = error.stack || '';
    } else {
      message = error;
    }

    // On loggue l'erreur via notre service
    this.logger.error(message, stackTrace);

    // Optionnel : Relancer l'erreur pour qu'elle apparaisse quand même dans la console du navigateur en DEV
    throw error;
  }
}
