package com.yeqifu.sys.common;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 *@Author zup
 *@Date: 2024/12/15
 */
public class AppFileUtils {

    /**
     * 文件上传的保存路径 默认值
     */
    public static String UPLOAD_PATH;

    static {
        try (InputStream stream = AppFileUtils.class.getClassLoader().getResourceAsStream("file.properties")) {

            Properties properties = new Properties();
            if (stream != null) {
                properties.load(stream);
            }
            // 从配置文件中获取路径
            String property = properties.getProperty("filepath");

            // 如果配置了路径，使用配置的路径，否则使用默认路径
            if (property != null && !property.isEmpty()) {
                UPLOAD_PATH = property;
            } else {
                String userHome = System.getProperty("user.home");

                // 设置上传路径为当前操作系统用户的 Documents 文件夹下的 WebFile 文件夹
                String defaultPath = userHome + File.separator + "Documents" + File.separator + "WebFile";
                // 创建了 File 对象
                File uploadDir = new File(defaultPath);
                // 将路径赋值给静态变量 UPLOAD_PATH
                UPLOAD_PATH = uploadDir.getAbsolutePath();
            }

            File dir = new File(UPLOAD_PATH);
            System.out.println(dir.getAbsolutePath());
            // 如果目录不存在，则创建
            if (!dir.exists()) {
                if (!dir.mkdirs()) {
                    throw new RuntimeException("无法创建上传路径：" + dir.getAbsolutePath());
                }
            }

            // 检查上传路径是否可读写
            if (!dir.canRead() || !dir.canWrite()) {
                throw new RuntimeException("上传路径不可读写：" + dir.getAbsolutePath());
            }

        } catch (IOException e) {
            // 处理配置文件加载时的异常
            e.printStackTrace();
            throw new RuntimeException("加载文件上传的保存路径配置失败！", e);
        }

    }

    /**
     * 根据文件原始名字得到新名字
     * @param oldName 原始名
     * @return 新名字由32位随机数加图片后缀组成
     */
    public static String createNewFileName(String oldName) {
        //获取文件名后缀
        String stuff = oldName.substring(oldName.lastIndexOf("."));
        //将UUID与文件名后缀进行拼接，生成新的文件名  生成的UUID为32位
        return IdUtil.simpleUUID().toUpperCase() + stuff;
    }

//    /**
//     * 文件下载
//     * @param path
//     * @return
//     */
//    public static ResponseEntity<Object> createResponseEntity(String path) {
//        //1,构造文件对象
//        File file=new File(UPLOAD_PATH, path);
//        if(file.exists()) {
//            //将下载的文件，封装byte[]
//            byte[] bytes = null;
//            try {
//                bytes = FileUtil.readBytes(file);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//            //创建封装响应头信息的对象
//            HttpHeaders header = new HttpHeaders();
//            //封装响应内容类型(APPLICATION_OCTET_STREAM 响应的内容不限定)
//            header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//            //创建ResponseEntity对象
//            ResponseEntity<Object> entity= new ResponseEntity<Object>(bytes, header, HttpStatus.CREATED);
//            return entity;
//        }
//        return null;
//    }

    /**
     * 更改图片的名字 去掉_temp
     * @param nameImg 图片名
     * @return String
     */
    public static String renameFile(String nameImg) {
        File file = new File(UPLOAD_PATH, nameImg);
        String newNameImg = nameImg.replace("_temp", "");
        if (file.exists()){
            File newFile = new File(UPLOAD_PATH, newNameImg);
            boolean success = file.renameTo(newFile);
            if (!success) {
                throw new RuntimeException("重命名文件失败：" + file.getAbsolutePath() + " -> "
                        + newFile.getAbsolutePath());
            }
        }
        return newNameImg;
    }

    /**
     * 根据旧路径删除图片
     * @param oldPath 图片路径
     */
    public static boolean removeFileByPath(String oldPath) {
        // 图片的路径是默认用户头像则不执行删除操作
        if (oldPath != null && oldPath.endsWith(Constast.DEFAULT_IMG_USER)) {
            return true;
        } else {
            assert oldPath != null;
            File file = new File(UPLOAD_PATH, oldPath);
            // 文件存在则删除
            if (file.exists()) {
                if (file.delete()) {
                    return true;
                } else {
                    throw new RuntimeException("文件删除失败: " + file.getAbsolutePath());
                }
            } else {
                // 文件不存在
                return false;
            }
        }

    }


}