import {message} from 'ant-design-vue'
import JSZip from "jszip"
import { saveAs } from 'file-saver'

export default {
	// 对下载的流进行处理，直接从浏览器下载下来
	resultDownload(res) {
		if (res.data.type === 'application/json') {
			// 错误以及无权限
			const reader = new FileReader(res.data)
			reader.readAsText(res.data)
			reader.onload = () => {
				const result = JSON.parse(reader.result)
				message.error(result.msg)
			}
		} else {
			const blob = new Blob([res.data], {type: 'application/octet-stream;charset=UTF-8'})
			const contentDisposition = res.headers['content-disposition']
			const patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
			const $link = document.createElement('a')
			$link.href = URL.createObjectURL(blob)
			$link.download = decodeURIComponent(patt.exec(contentDisposition)[1])
			$link.click()
			document.body.appendChild($link)
			document.body.removeChild($link) // 下载完成移除元素
			window.URL.revokeObjectURL($link.href) // 释放掉blob对象
		}
	},

	blobDownload(blob, filename) {
		const $link = document.createElement('a')
		$link.href = URL.createObjectURL(blob)
		$link.download = decodeURIComponent(filename)
		$link.click()
		document.body.appendChild($link)
		document.body.removeChild($link) // 下载完成移除元素
		window.URL.revokeObjectURL($link.href) // 释放掉blob对象
	},
	/**
	 * zip批量图片下载
	 * @param images    实际的图片URL数组
	 * @param filenames 对应的文件名数组
	 * @param zipName   下载后的zip文件名称(不包含后缀名)
	 */
	async downloadImageZip(images, filenames, zipName) {
		const zip = new JSZip();
		for (let i = 0; i < images.length; i++) {
			// 获取图片资源
			await fetch(images[i])
				.then(response => response.blob())
				.then(blob => {
					// 将Blob添加到ZIP包中
					zip.file(filenames[i], blob);
					// 在所有图片都处理完之后生成ZIP
					if (i === images.length - 1) {
						zip.generateAsync({type: 'blob'}).then(content => {
							// 下载ZIP文件
							saveAs(content, zipName + '.zip');
						});
					}
				});
		}
	}
}
