import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpEventType } from '@angular/common/http';
import { Observable } from 'rxjs';
import { finalize, tap } from 'rxjs/operators';
import { ProgressTracker } from '.';


@Injectable()
export class ProgressInterceptor implements HttpInterceptor {
    constructor(private progressTracker: ProgressTracker) { }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(request).pipe(
            tap(event => {
                if (event.type === HttpEventType.UploadProgress) {
                    const kbLoaded2 = event.loaded / event.total * 100;
                    this.progressTracker.setProgress(kbLoaded2);
                }
            }),
            finalize(() =>  this.progressTracker.setProgress(undefined))
        );
    }
}