import { message } from 'antd';
import { saveAs } from 'file-saver';
import JSZip from 'jszip';

/**
 * 下载多张图片为压缩包
 * @param images 图片数组
 * @param zipName 压缩包名称（不含扩展名）
 */
export async function downloadImagesAsZip(
	images: BusinessAPI.UploadFileItem[],
	zipName: string,
): Promise<void> {
	if (!images || images.length === 0) {
		message.warning('暂无图片可下载');
		return;
	}

	try {
		const zip = new JSZip();
		const folder = zip.folder(zipName);

		// 下载所有图片并添加到压缩包
		const downloadPromises = images.map(async (image, index) => {
			try {
				const response = await fetch(image.filePath!);
				const blob = await response.blob();

				// 使用原始文件名，如果没有则使用索引
				const fileName = image.fileName || `image_${index + 1}.jpg`;

				// 添加到压缩包
				folder?.file(fileName, blob);
			} catch (error) {
				console.error(`下载图片失败: ${image.filePath}`, error);
				throw error;
			}
		});

		await Promise.all(downloadPromises);

		// 生成压缩包
		const content = await zip.generateAsync({ type: 'blob' });

		// 触发下载
		saveAs(content, `${zipName}.zip`);

		message.success('下载成功');
	} catch (error) {
		console.error('下载失败:', error);
		message.error('下载失败，请重试');
	}
}

/**
 * 下载单个文件
 * @param url 文件URL
 * @param fileName 文件名
 */
export async function downloadFile(
	url: string,
	fileName: string,
): Promise<void> {
	try {
		const response = await fetch(url);
		const blob = await response.blob();
		saveAs(blob, fileName);
		message.success('下载成功');
	} catch (error) {
		console.error('下载失败:', error);
		message.error('下载失败，请重试');
	}
}
