package tech.easyflow.ai.node.filegeneration;

import cn.hutool.core.util.IdUtil;
import org.springframework.util.StringUtils;

/**
 * 文件名清洗工具。
 *
 * @author Codex
 * @since 2026-04-18
 */
public final class FileNameSanitizer {
    private static final String INVALID_CHARS_PATTERN = "[\\\\/:*?\"<>|\\p{Cntrl}]";

    private FileNameSanitizer() {
    }

    /**
     * 清洗并补齐目标扩展名。
     *
     * @param rawFileName 原始文件名
     * @param targetFormat 目标格式
     * @return 清洗后的最终文件名
     */
    public static String sanitize(String rawFileName, TargetFormat targetFormat) {
        String baseName = sanitizeBaseName(rawFileName);
        if (!StringUtils.hasText(baseName)) {
            baseName = "generated-file-" + IdUtil.fastSimpleUUID();
        }
        return removeTrailingExtension(baseName) + "." + targetFormat.getValue();
    }

    /**
     * 清洗不含扩展名的文件名主体。
     *
     * @param rawFileName 原始文件名
     * @return 清洗后的文件名主体
     */
    public static String sanitizeBaseName(String rawFileName) {
        if (!StringUtils.hasText(rawFileName)) {
            return null;
        }
        String sanitized = rawFileName.trim().replaceAll(INVALID_CHARS_PATTERN, "");
        return sanitized.isBlank() ? null : sanitized;
    }

    private static String removeTrailingExtension(String fileName) {
        int lastDot = fileName.lastIndexOf('.');
        if (lastDot <= 0) {
            return fileName;
        }
        return fileName.substring(0, lastDot);
    }
}
