import RNFetchBlob from 'rn-fetch-blob';

import { IFileUpload } from './interfaces';

type TMethods = 'POST' | 'GET' | 'DELETE' | 'PUT' | 'post' | 'get' | 'delete' | 'put';

class FileUpload {
	fetch = (method: TMethods, url: string, headers: { [key: string]: string }, data: IFileUpload[]) => {
		const formData = data.map(item => {
			if (item.uri) {
				return {
					name: item.name,
					type: item.type,
					filename: item.filename,
					data: RNFetchBlob.wrap(decodeURI(item.uri))
				};
			}
			return item;
		});

		return RNFetchBlob.fetch(method, url, headers, formData);
	};
}

const fileUpload = new FileUpload();
export default fileUpload;