import request from '/@/utils/request';
import { useMessage } from '/@/hooks/message';

/**
 * 通用的 blob 文件下载辅助函数
 * @param promise 请求 Promise
 * @param fileName 下载文件名
 */
export const downloadBlobFile = async (promise: Promise<any>, fileName: string) => {
	try {
		const res = await promise;
		// 检查响应数据
		if (!res.data) {
			useMessage().error('响应数据为空');
			return false;
		}

		// 检查是否是错误响应（JSON 格式的错误信息）
		const contentType = res.headers?.['content-type'] || '';
		if (contentType.includes('application/json')) {
			// 后端返回了 JSON 格式的错误信息
			const reader = new FileReader();
			reader.onload = () => {
				try {
					const errorData = JSON.parse(reader.result as string);
					useMessage().error(errorData.msg || '下载失败');
				} catch {
					useMessage().error('下载失败');
				}
			};
			reader.readAsText(res.data);
			return false;
		}

		// 创建 blob 对象
		const blob = res.data instanceof Blob ? res.data : new Blob([res.data]);

		// 检查 blob 大小
		if (blob.size === 0) {
			useMessage().error('文件内容为空');
			return false;
		}

		// 创建下载链接
		const url = window.URL.createObjectURL(blob);
		const link = document.createElement('a');
		link.href = url;
		link.download = fileName;
		document.body.appendChild(link);
		link.click();
		// 清理
		window.URL.revokeObjectURL(url);
		document.body.removeChild(link);
		useMessage().success('下载成功');
		return true;
	} catch (error: any) {
		console.error('文件下载失败:', error);
		useMessage().error(error.msg || '下载失败');
		return false;
	}
};

// ==================== 教室日卫生 ====================

/**
 * 下载教室日卫生导入模板
 */
export const downloadClassRoomHygieneDailyTemplate = () => {
	return request({
		url: '/stuwork/classRoomHygieneDaily/import/template',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 教室日卫生导入
 * @param formData 文件表单数据
 */
export const importClassRoomHygieneDaily = (formData: FormData) => {
	return request({
		url: '/stuwork/classRoomHygieneDaily/import',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

/**
 * 创建导出教室日卫生异步任务
 * @param query 查询参数
 */
export const makeExportClassRoomHygieneDailyTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportClassRoomHygieneDailyTask',
		method: 'post',
		data: query,
	});
};

// ==================== 教室月卫生 ====================

/**
 * 下载教室月卫生导入模板
 */
export const downloadClassRoomHygieneMonthlyTemplate = () => {
	return request({
		url: '/stuwork/classroomhygienemonthly/import/template',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 教室月卫生导入
 * @param formData 文件表单数据
 */
export const importClassRoomHygieneMonthly = (formData: FormData) => {
	return request({
		url: '/stuwork/classroomhygienemonthly/import',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

/**
 * 创建导出教室月卫生异步任务
 * @param query 查询参数
 */
export const makeExportClassRoomHygieneMonthlyTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportClassRoomHygieneMonthlyTask',
		method: 'post',
		data: query,
	});
};

// ==================== 日常巡检 ====================

/**
 * 下载日常巡检导入模板
 */
export const downloadClassCheckDailyTemplate = () => {
	return request({
		url: '/stuwork/classcheckdaily/importTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 日常巡检导入
 * @param formData 文件表单数据
 */
export const importClassCheckDaily = (formData: FormData) => {
	return request({
		url: '/stuwork/classcheckdaily/import',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

/**
 * 创建导出日常巡检异步任务
 * @param query 查询参数
 */
export const makeExportClassCheckDailyTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportClassCheckDailyTask',
		method: 'post',
		data: query,
	});
};

// ==================== 日常行为 ====================

/**
 * 下载日常行为导入模板
 */
export const downloadClassHygieneDailyTemplate = () => {
	return request({
		url: '/stuwork/classhygienedaily/importTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 日常行为导入
 * @param formData 文件表单数据
 */
export const importClassHygieneDaily = (formData: FormData) => {
	return request({
		url: '/stuwork/classhygienedaily/import',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

/**
 * 创建导出日常行为异步任务
 * @param query 查询参数
 */
export const makeExportClassHygieneDailyTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportClassHygieneDailyTask',
		method: 'post',
		data: query,
	});
};

// ==================== 班级概况 / 学生信息 ====================

/**
 * 创建导出班级概况异步任务
 * @param query 查询参数
 */
export const makeExportClassOverviewTask = (query?: any) => {
	return request({
		url: '/basic/basicFile/makeExportClassOverviewTask',
		method: 'post',
		data: query,
	});
};

/**
 * 创建导出学生信息异步任务
 * @param query 查询参数
 */
export const makeExportStudentDataTask = (query?: any) => {
	return request({
		url: '/basic/basicFile/makeExportStudentDataTask',
		method: 'post',
		data: query,
	});
};

// ==================== 班主任考核 ====================

/**
 * 下载班主任考核导入模板
 */
export const downloadClassMasterEvaluationTemplate = () => {
	return request({
		url: '/stuwork/file/getClassMasterEvaluationImportTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 班主任考核导入
 * @param formData 文件表单数据
 */
export const importClassMasterEvaluation = (formData: FormData) => {
	return request({
		url: '/stuwork/file/importClassMasterEvaluation',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

/**
 * 创建导出班主任考核异步任务
 * @param query 查询参数
 */
export const makeExportClassMasterEvaluationTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportClassMasterEvaluationTask',
		method: 'post',
		data: query,
	});
};

// ==================== 住宿管理 ====================

/**
 * 创建导出住宿名单异步任务
 * @param query 查询参数
 */
export const makeExportDormStudentTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportDormStudentTask',
		method: 'post',
		data: query,
	});
};

/**
 * 创建导出住宿情况统计表异步任务
 * @param query 查询参数
 */
export const makeExportDormStatisticsTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportDormStatisticsTask',
		method: 'post',
		data: query,
	});
};

/**
 * 创建导出宿舍房间异步任务
 * @param query 查询参数
 */
export const makeExportDormRoomTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportDormRoomTask',
		method: 'post',
		data: query,
	});
};

/**
 * 创建导出异常住宿异步任务
 * @param query 查询参数
 */
export const makeExportDormStudentAbnormalTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportDormStudentAbnormalTask',
		method: 'post',
		data: query,
	});
};

// ==================== 宿舍月卫生 ====================

/**
 * 导出宿舍月卫生模板
 * @param query 查询参数
 */
export const exportDormHygieneMonthlyTemplate = (query?: any) => {
	return request({
		url: '/stuwork/file/exportDormHygieneMonthlyTemplate',
		method: 'post',
		data: query,
		responseType: 'blob',
	});
};

/**
 * 导入宿舍月卫生数据
 * @param formData 文件表单数据
 */
export const importDormHygieneMonthly = (formData: FormData) => {
	return request({
		url: '/stuwork/file/importDormHygieneMonthly',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

// ==================== 宿舍整改 ====================

/**
 * 创建导出宿舍整改异步任务
 * @param query 查询参数
 */
export const makeExportDormReformTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportDormReformTask',
		method: 'post',
		data: query,
	});
};

// ==================== 宿舍水电 ====================

/**
 * 创建导出宿舍水电异步任务
 * @param query 查询参数
 */
export const makeExportDormWaterElectricityTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportDormWaterElectricityTask',
		method: 'post',
		data: query,
	});
};

// ==================== 学籍异动 ====================

/**
 * 创建导出学籍异动异步任务
 * @param query 查询参数
 */
export const makeExportStudentChangeTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportStudentChangeTask',
		method: 'post',
		data: query,
	});
};

// ==================== 学生违纪 ====================

/**
 * 创建导出学生违纪异步任务
 * @param query 查询参数
 */
export const makeExportStudentDisciplineTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportStudentDisciplineTask',
		method: 'post',
		data: query,
	});
};

// ==================== 学生请假 ====================

/**
 * 创建导出学生请假异步任务
 * @param query 查询参数
 */
export const makeExportStudentLeaveTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportStudentLeaveTask',
		method: 'post',
		data: query,
	});
};

// ==================== 学生评优评先 ====================

/**
 * 创建导出学生评优评先异步任务
 * @param query 查询参数
 */
export const makeExportStudentPraiseTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportStudentPraiseTask',
		method: 'post',
		data: query,
	});
};

// ==================== 班费 ====================

/**
 * 创建导出班费异步任务
 * @param query 查询参数
 */
export const makeExportClassFundTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportClassFundTask',
		method: 'post',
		data: query,
	});
};

// ==================== 操行考核 ====================

/**
 * 导出操行考核模板
 */
export const exportConductAssessmentTemplate = () => {
	return request({
		url: '/stuwork/file/exportConductAssessmentTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 导入操行考核数据
 * @param formData 文件表单数据
 */
export const importConductAssessment = (formData: FormData) => {
	return request({
		url: '/stuwork/file/importConductAssessment',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

// ==================== 安全教育 ====================

/**
 * 创建导出安全教育异步任务
 * @param query 查询参数
 */
export const makeExportSafetyEducationTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportSafetyEducationTask',
		method: 'post',
		data: query,
	});
};

// ==================== 文明班级 ====================

/**
 * 导出文明班级模板
 */
export const exportRewardClassTemplate = () => {
	return request({
		url: '/stuwork/file/exportRewardClassTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 导入文明班级数据
 * @param formData 文件表单数据
 */
export const importRewardClass = (formData: FormData) => {
	return request({
		url: '/stuwork/file/importRewardClass',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

// ==================== 文明宿舍 ====================

/**
 * 导出文明宿舍模板
 */
export const exportRewardDormTemplate = () => {
	return request({
		url: '/stuwork/file/exportRewardDormTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 导入文明宿舍数据
 * @param formData 文件表单数据
 */
export const importRewardDorm = (formData: FormData) => {
	return request({
		url: '/stuwork/file/importRewardDorm',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

// ==================== 班级学生评语 ====================

/**
 * 导出班级学生评语文档（单人/班级）
 * @param query 查询参数
 */
export const exportClassAssetsIntroduction = (query?: any) => {
	return request({
		url: '/stuwork/classassets/exportIntroduction',
		method: 'post',
		data: query,
		responseType: 'blob',
	});
};

// ==================== 学生评语 ====================

/**
 * 导出学生评语模板
 */
export const exportStudentCommentTemplate = () => {
	return request({
		url: '/ems/file/exportStudentCommentTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 导入学生评语数据
 * @param formData 文件表单数据
 */
export const importStudentComment = (formData: FormData) => {
	return request({
		url: '/ems/file/importStudentComment',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

// ==================== 教室公物 ====================

/**
 * 创建导出教室公物异步任务
 * @param query 查询参数
 */
export const makeExportClassAssetsTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportClassAssetsTask',
		method: 'post',
		data: query,
	});
};

// ==================== 活动报名详情 ====================

/**
 * 创建导出活动报名详情异步任务
 * @param query 查询参数
 */
export const makeExportActivitySignUpDetailTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportActivitySignUpDetailTask',
		method: 'post',
		data: query,
	});
};

// ==================== 活动获奖 ====================

/**
 * 导出活动获奖模板
 */
export const exportActivityAwardsTemplate = () => {
	return request({
		url: '/stuwork/file/exportActivityAwardsTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 导入活动获奖数据
 * @param formData 文件表单数据
 */
export const importActivityAwards = (formData: FormData) => {
	return request({
		url: '/stuwork/file/importActivityAwards',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

// ==================== 团员信息 ====================

/**
 * 导出团员数据模板
 */
export const exportStuUnionLeagueTemplate = () => {
	return request({
		url: '/stuwork/file/exportStuUnionLeagueTemplate',
		method: 'get',
		responseType: 'blob',
	});
};

/**
 * 导入团员数据
 * @param formData 文件表单数据
 */
export const importStuUnionLeague = (formData: FormData) => {
	return request({
		url: '/stuwork/file/importStuUnionLeague',
		method: 'post',
		data: formData,
		headers: {
			'Content-Type': 'multipart/form-data',
		},
	});
};

/**
 * 创建导出团员信息异步任务
 * @param query 查询参数
 */
export const makeExportStuUnionLeagueTask = (query?: any) => {
	return request({
		url: '/stuwork/file/makeExportStuUnionLeagueTask',
		method: 'post',
		data: query,
	});
};
