import type { AxiosRequestConfig } from 'axios';

import type { RequestClient } from '../request-client';
import type { RequestResponse } from '../types';

class FileDownloader {
  private client: RequestClient;

  constructor(client: RequestClient) {
    this.client = client;
  }

  public async download(url: string, config?: AxiosRequestConfig): Promise<RequestResponse<Blob>> {
    const finalConfig: AxiosRequestConfig = {
      url,
      ...config,
      responseType: 'blob',
    };

    const response = await this.client.get<RequestResponse<Blob>>(finalConfig);

    return response;
  }
}

export { FileDownloader };
