import { Injectable } from '@angular/core';
import {
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpInterceptor,
  HttpErrorResponse
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { Router } from '@angular/router';
import { CookieService } from 'ngx-cookie-service';

@Injectable()
export class JwtInterceptor implements HttpInterceptor {

  constructor(
    private cookieService: CookieService,
    private router: Router
  ) {}

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    const token = this.cookieService.get('token');

    if (token) {

      request = request.clone({
        setHeaders: {
          Authorization: `Bearer ${token}`
        }
      });

    }

    
return next.handle(request).pipe(
  catchError((error: any) => {

    // ✅ Check if it's HttpErrorResponse
    if (error != "Unknown Error") {

      if (error.status === 401) {
        console.log("JWT expired or invalid. Redirecting to login.");

        this.cookieService.delete('token');
        this.router.navigate(['/account/login']);
        sessionStorage.clear()

      }

      // optional logging
      console.log('HTTP Error:', error.message);

    } else {
        this.cookieService.delete('token');

        this.router.navigate(['/account/login']);
        sessionStorage.clear()
      // ⚠️ Sometimes error is string like "Unknown error"
      console.log('Non-HTTP Error:', error);
    }

    return throwError(() => error);
  })
);

  }
}