package com.qqchen.deploy.backend.framework.utils;

import java.text.DecimalFormat;

/**
 * 文件工具类
 * 
 * 提供文件相关的通用工具方法
 */
public class FileUtils {
    
    private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.##");
    
    /**
     * 格式化文件大小
     * 
     * @param size 文件大小（字节）
     * @return 格式化后的字符串（如：1.5 MB）
     */
    public static String formatFileSize(Long size) {
        if (size == null || size == 0) {
            return "0 B";
        }
        
        if (size < 1024) {
            return size + " B";
        } else if (size < 1024 * 1024) {
            return DECIMAL_FORMAT.format(size / 1024.0) + " KB";
        } else if (size < 1024 * 1024 * 1024) {
            return DECIMAL_FORMAT.format(size / (1024.0 * 1024.0)) + " MB";
        } else {
            return DECIMAL_FORMAT.format(size / (1024.0 * 1024.0 * 1024.0)) + " GB";
        }
    }
    
    /**
     * 格式化文件大小（long类型参数重载）
     * 
     * @param size 文件大小（字节）
     * @return 格式化后的字符串（如：1.5 MB）
     */
    public static String formatFileSize(long size) {
        return formatFileSize(Long.valueOf(size));
    }
    
    /**
     * 获取文件扩展名
     * 
     * @param filename 文件名
     * @return 文件扩展名（不含点），如果没有扩展名则返回null
     */
    public static String getFileExtension(String filename) {
        if (filename == null || filename.isEmpty()) {
            return null;
        }
        
        int lastDotIndex = filename.lastIndexOf('.');
        if (lastDotIndex == -1 || lastDotIndex == filename.length() - 1) {
            return null;
        }
        
        return filename.substring(lastDotIndex + 1);
    }
    
    /**
     * 获取文件名（不含扩展名）
     * 
     * @param filename 文件名
     * @return 不含扩展名的文件名
     */
    public static String getFileNameWithoutExtension(String filename) {
        if (filename == null || filename.isEmpty()) {
            return filename;
        }
        
        int lastDotIndex = filename.lastIndexOf('.');
        if (lastDotIndex == -1) {
            return filename;
        }
        
        return filename.substring(0, lastDotIndex);
    }
    
    /**
     * 验证文件名是否合法（不包含非法字符）
     * 
     * @param filename 文件名
     * @return 是否合法
     */
    public static boolean isValidFilename(String filename) {
        if (filename == null || filename.isEmpty()) {
            return false;
        }
        
        // 检查是否包含非法字符
        String illegalChars = "/\\:*?\"<>|";
        for (char c : illegalChars.toCharArray()) {
            if (filename.indexOf(c) != -1) {
                return false;
            }
        }
        
        return true;
    }
}
