package cn.gov.customs.wxjy.common.importtool.util;

import cn.gov.customs.cacp.sdks.core.result.CacpResultCodeMessage;
import cn.gov.customs.cacp.sdks.core.result.Result;
import cn.gov.customs.wxjy.common.importtool.model.ImportResult;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.util.CollectionUtils;

public class ImportUtils {

	/**
	 * 构建详细的导入结果信息
	 */
	public static <T> Result<?> buildImportResponse(ImportResult<T> result) {
		if (result == null) {
			return Result.fail(CacpResultCodeMessage.WARNING,"导入结果为空");
		}

		StringBuilder message = new StringBuilder();
		boolean isSuccess = result.isSuccess();

		if (isSuccess) {
			// 完全成功的情况
			message.append("导入成功！");
			if (result.getSuccessCount() > 0) {
				if (result.getNewCount() > 0 && result.getUpdateCount() > 0) {
					message.append("新增").append(result.getNewCount())
						.append("条，更新").append(result.getUpdateCount())
						.append("条，共").append(result.getSuccessCount()).append("条数据。");
				} else if (result.getNewCount() > 0) {
					message.append("新增").append(result.getNewCount()).append("条数据。");
				} else if (result.getUpdateCount() > 0) {
					message.append("更新").append(result.getUpdateCount()).append("条数据。");
				} else {
					message.append("成功导入").append(result.getSuccessCount()).append("条数据。");
				}
			}
		} else {
			// 失败或部分成功的情况
			if (result.getSuccessCount() > 0) {
				// 部分成功
				message.append("导入完成");
				if (result.getNewCount() > 0 && result.getUpdateCount() > 0) {
					message.append("，成功").append(result.getSuccessCount())
						.append("条（新增").append(result.getNewCount())
						.append("，更新").append(result.getUpdateCount()).append("）");
				} else if (result.getNewCount() > 0) {
					message.append("，成功").append(result.getSuccessCount())
						.append("条（新增").append(result.getNewCount()).append("）");
				} else if (result.getUpdateCount() > 0) {
					message.append("，成功").append(result.getSuccessCount())
						.append("条（更新").append(result.getUpdateCount()).append("）");
				} else {
					message.append("，成功").append(result.getSuccessCount()).append("条");
				}

				if (CollectionUtils.isEmpty(result.getErrors())) {
					message.append("，失败").append(result.getErrors().size()).append("条");
				}
				message.append("。");
			} else {
				// 完全失败
				message.append("导入失败");
				if (CollectionUtils.isEmpty(result.getErrors())) {
					message.append("，共").append(result.getErrors().size()).append("条数据全部失败");
				}
				message.append("。");
			}

			// 添加详细错误信息
			if (CollectionUtils.isEmpty(result.getErrors())) {
				message.append("\n\n错误详情：");

				// 先显示行级错误（行号>0）
				result.getErrors().stream()
					.filter(error -> error.getRowIndex() > 0)
					.limit(10)
					.forEach(error ->
						message.append("\n第").append(error.getRowIndex())
							.append("行：").append(error.getErrorMessage()));

				// 再显示系统级错误（行号=0）
				result.getErrors().stream()
					.filter(error -> error.getRowIndex() == 0)
					.limit(5)
					.forEach(error ->
						message.append("\n系统错误：").append(error.getErrorMessage()));

				// 显示更多错误提示
				long rowErrorsCount = result.getErrors().stream()
					.filter(error -> error.getRowIndex() > 0).count();
				long systemErrorsCount = result.getErrors().stream()
					.filter(error -> error.getRowIndex() == 0).count();

				if (rowErrorsCount > 10 || systemErrorsCount > 5) {
					message.append("\n... 还有");
					if (rowErrorsCount > 10) {
						message.append(" ").append(rowErrorsCount - 10).append("条行错误");
					}
					if (systemErrorsCount > 5) {
						if (rowErrorsCount > 10) message.append("和");
						message.append(" ").append(systemErrorsCount - 5).append("条系统错误");
					}
					message.append("未显示");
				}
			}
		}

		String finalMessage = message.toString().replace("\n", "<br>");
		return Result.success(finalMessage);
	}

	/**
	 * 构建简化的导入结果信息（用于日志或其他场景）
	 */
	public static String buildImportSummary(ImportResult<T> result) {
		if (result == null) {
			return "导入结果为空";
		}

		StringBuilder summary = new StringBuilder();
		summary.append("总计:").append(result.getTotalCount())
			.append("条, 成功:").append(result.getSuccessCount())
			.append("条, 新增:").append(result.getNewCount())
			.append("条, 更新:").append(result.getUpdateCount())
			.append("条, 失败:").append(result.getErrors() != null ? result.getErrors().size() : 0).append("条");

		return summary.toString();
	}

	/**
	 * 检查导入结果是否包含严重错误
	 */
	public static boolean hasCriticalError(ImportResult<T> result) {
		if (result == null || CollectionUtils.isEmpty(result.getErrors())) {
			return false;
		}

		return result.getErrors().stream()
			.anyMatch(error -> error.getRowIndex() == 0); // 行号为0表示系统级错误
	}

	/**
	 * 获取导入结果的错误统计
	 */
	public static String getErrorStatistics(ImportResult<T> result) {
		if (result == null || CollectionUtils.isEmpty(result.getErrors())) {
			return "无错误";
		}

		long rowErrors = result.getErrors().stream()
			.filter(error -> error.getRowIndex() > 0).count();
		long systemErrors = result.getErrors().stream()
			.filter(error -> error.getRowIndex() == 0).count();

		StringBuilder stats = new StringBuilder();
		if (rowErrors > 0) {
			stats.append("行级错误:").append(rowErrors).append("条");
		}
		if (systemErrors > 0) {
			if (rowErrors > 0) stats.append(", ");
			stats.append("系统错误:").append(systemErrors).append("条");
		}

		return stats.toString();
	}
}
