package com.njcn.common.utils;

import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.StrUtil;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * @author hongawen
 * @version 1.0.0
 * @date 2023年04月19日 16:02
 */
public class FileUtil {

    /***
     * 随机生成文件名
     * @author hongawen
     * @date 2023/4/19 16:02
     * @param originalFileName 原文件名
     * @return String
     */
    public static String generateFileName(String originalFileName) {
        String suffix;
        if (originalFileName.contains(StrPool.DOT)) {
            suffix = originalFileName.substring(originalFileName.lastIndexOf(StrPool.DOT));
        } else {
            suffix = StrPool.DOT + originalFileName;
        }
        return UUID.randomUUID().toString().replace("-", "").toUpperCase() + suffix;
    }

    /**
     * MultipartFile 转 String
     *
     * @param multipartFile 原字符串
     * @return 成功标记
     */
    public static String multipartFileToString(MultipartFile multipartFile) {
        StringBuilder txtResult = new StringBuilder();
        try (
                InputStreamReader isr = new InputStreamReader(multipartFile.getInputStream(), StandardCharsets.UTF_8);
                BufferedReader br = new BufferedReader(isr)
        ) {
            String lineTxt;
            while ((lineTxt = br.readLine()) != null) {
                txtResult.append(lineTxt);
            }
            return txtResult.toString();
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 判断文件是否为word格式
     *
     * @param fileName 文件名
     */
    public static boolean judgeFileIsWord(String fileName) {
        // 检查文件名是否为空
        if (StrUtil.isBlank(fileName)) {
            return false;
        }
        // 获取文件扩展名
        String fileExtension = getFileExtension(fileName);
        // 定义支持的文件类型
        String[] allowedExtensions = {"doc", "docx"};

        // 检查扩展名是否在允许的列表中
        for (String ext : allowedExtensions) {
            if (ext.equalsIgnoreCase(fileExtension)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断文件是否为pdf格式
     *
     * @param fileName 文件名
     */
    public static boolean judgeFileIsPdf(String fileName) {
        // 检查文件名是否为空
        if (StrUtil.isBlank(fileName)) {
            return false;
        }
        // 获取文件扩展名
        String fileExtension = getFileExtension(fileName);
        // 定义支持的文件类型
        String[] allowedExtensions = {"pdf"};

        // 检查扩展名是否在允许的列表中
        for (String ext : allowedExtensions) {
            if (ext.equalsIgnoreCase(fileExtension)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断文件是否为excel格式
     *
     * @param fileName 文件名
     */
    public static boolean judgeFileIsExcel(String fileName) {
        // 检查文件名是否为空
        if (StrUtil.isBlank(fileName)) {
            return false;
        }
        // 获取文件扩展名
        String fileExtension = getFileExtension(fileName);
        // 定义支持的文件类型
        String[] allowedExtensions = {"xls", "xlsx"};

        // 检查扩展名是否在允许的列表中
        for (String ext : allowedExtensions) {
            if (ext.equalsIgnoreCase(fileExtension)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断文件是否为excel格式
     *
     * @param fileName 文件名
     */
    public static boolean judgeFileIsZip(String fileName) {
        // 检查文件名是否为空
        if (StrUtil.isBlank(fileName)) {
            return false;
        }
        // 获取文件扩展名
        String fileExtension = getFileExtension(fileName);
        // 定义支持的文件类型
        String[] allowedExtensions = {"zip", "rar"};

        // 检查扩展名是否在允许的列表中
        for (String ext : allowedExtensions) {
            if (ext.equalsIgnoreCase(fileExtension)) {
                return true;
            }
        }
        return false;
    }


    /**
     * 从文件名中提取扩展名
     *
     * @param fileName 文件名
     * @return 扩展名
     */
    private static String getFileExtension(String fileName) {
        int dotIndex = fileName.lastIndexOf('.');
        if (dotIndex == -1) {
            return "";
        }
        return fileName.substring(dotIndex + 1);
    }

}
