package com.seer.teach.iot.common.uitls;

import com.github.houbb.heaven.response.exception.CommonRuntimeException;
import com.seer.teach.common.enums.ResultCodeEnum;
import com.seer.teach.common.exception.CommonException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.regex.Pattern;

/**
 * <p>
 *
 * </p >
 *
 * @author Captain
 * @since 2025-08-13 14:29
 */
@Slf4j
public class IotUtils {

    private static final Pattern IPV4 = Pattern.compile("^(?:\\d{1,3}\\.){3}\\d{1,3}$");

    /**
     * 计算占比（0~1之间的BigDecimal，保留4位小数），适配 Decimal(5,4)
     *
     * @param total 总题数（必须大于0）
     * @param correct 正确题数
     * @return 正确率（如 0.9080 表示 90.8%）
     */
    public static BigDecimal calculateAccuracy(int total, int correct) {
        if (total <= 0) {
            throw new IllegalArgumentException("总题数必须大于0");
        }

        BigDecimal totalDecimal = BigDecimal.valueOf(total);
        BigDecimal correctDecimal = BigDecimal.valueOf(correct);

        // 计算比例，保留 4 位小数，四舍五入
        return correctDecimal.divide(totalDecimal, 4, RoundingMode.HALF_UP);
    }

    /**
     * 将占比（如 0.9080）转换为百分比字符串，保留1位小数
     *
     * @param accuracy 正确率（0~1之间的BigDecimal）
     * @return 百分比字符串（如 "90.8%"）
     */
    public static String formatAccuracyPercentage(BigDecimal accuracy) {
        return accuracy.multiply(BigDecimal.valueOf(100))
                .setScale(1, RoundingMode.HALF_UP)
                .toPlainString() + "%";
    }

    /**
     * 将 MultipartFile 转为临时 File
     *
     * @param multipartFile 上传的文件
     * @return 转换后的临时 File
     */
    public static File toFile(MultipartFile multipartFile) {
        if (multipartFile == null || multipartFile.isEmpty()) {
            throw new IllegalArgumentException("MultipartFile 为空，无法转换为 File");
        }

        String originalFilename = multipartFile.getOriginalFilename();
        String suffix = "";
        if (originalFilename != null && originalFilename.contains(".")) {
            suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        }

        try {
            // 创建临时文件（系统临时目录）
            File tempFile = File.createTempFile("upload_", suffix);
            multipartFile.transferTo(tempFile);

            log.debug("MultipartFile 转换为临时文件成功: {}", tempFile.getAbsolutePath());
            return tempFile;
        } catch (IOException e) {
            log.error("MultipartFile 转换为 File 失败, 文件名={}", originalFilename, e);
            throw new CommonException(ResultCodeEnum.FILE_TRANS_FAILED);
        }
    }


    /**
     * 删除临时文件
     *
     * @param file 需要删除的文件
     */
    public static void deleteTempFile(File file) {
        if (file != null && file.exists()) {
            if (!file.delete()) {
                log.warn("删除临时文件失败: {}", file.getAbsolutePath());
            } else {
                log.debug("临时文件已删除: {}", file.getAbsolutePath());
            }
        }
    }



}
