package com.bonus.obs.utils;

import com.bonus.common.core.utils.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileUtils {
    /**
     * 检查MultipartFile是否有效（不为空且大小不超过5GB）
     *
     * @param file MultipartFile对象
     * @return 文件有效返回true，否则返回false
     */
    public static boolean isValidFile(MultipartFile file) {
        if (file == null || file.isEmpty()) {
            return false;
        }
        // 文件大小限制为5GB
        long maxSizeInBytes = 5L * 1024 * 1024 * 1024;
        return file.getSize() <= maxSizeInBytes;
    }

    /**
     * 生成统一路径的objectName
     *
     * @param fileName 文件名
     * @return 生成的objectName
     */
    public static String generateObjectName(String fileName) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        String datePath = sdf.format(new Date());
        return "uploads/" + datePath + "/" + fileName;
    }


    public static boolean isValidOssFilePath(String ossFilePath) {
        // 根据实际情况添加对ossFilePath的校验逻辑，确保其只包含安全的字符
        return StringUtils.hasText(ossFilePath) && ossFilePath.matches("^[\\w\\d\\-\\_\\.]+$");
    }

    public static  String sanitizeFileName(String fileName) {
        // 避免文件名注入，移除或替换不安全的字符
        return fileName.replaceAll("[^a-zA-Z0-9\\.\\-_]", "_");
    }


    /**
     * 从文件路径中提取文件名
     * @param ossFilePath 文件路径
     * @return 文件名
     */
    public static String getFileNameFromPath(String ossFilePath) {
        Path path = Paths.get(ossFilePath);
        return path.getFileName().toString();
    }


    /**
     * MultipartFile 转 File
     *
     * @param multiFile MultipartFile对象
     * @return 转换后的File对象
     */
    public static File multipartFileToFile(MultipartFile multiFile) {
        try {
            String fileName = multiFile.getOriginalFilename();
            if (fileName == null) {
               return null;
            }
            String prefix = fileName.substring(0, fileName.lastIndexOf("."));
            String suffix = fileName.substring(fileName.lastIndexOf("."));
            File file = File.createTempFile(prefix, suffix);
            multiFile.transferTo(file);
            return file;
        } catch (Exception e) {
            return null;
        }
    }

}
