package com.njcn.gather.icd.mapping.component;

import com.njcn.gather.icd.mapping.utils.GeneratedFileNameUtil;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;

/**
 * 文件存储服务。负责把最终映射 JSON 保存到指定目录。
 */
@Component
public class FileStorageService {
    /**
     * 将映射 JSON 写入目标目录。
     *
     * outputDir 为空时使用当前工作目录，返回最终文件绝对路径。
     */
    public String save(String fileName, String content, String outputDir) {
        try {
            // 输出目录允许由请求覆盖，未传时落到当前工作目录。
            File dir = outputDir == null || outputDir.trim().isEmpty() ? new File(".") : new File(outputDir);
            if (!dir.exists() && !dir.mkdirs()) {
                throw new IllegalStateException("输出目录创建失败：" + dir.getAbsolutePath());
            }
            if (!dir.isDirectory()) {
                throw new IllegalStateException("输出路径不是目录：" + dir.getAbsolutePath());
            }
            File target = new File(dir, GeneratedFileNameUtil.appendToday(fileName));
            try (FileOutputStream fos = new FileOutputStream(target)) {
                fos.write(content.getBytes(StandardCharsets.UTF_8));
            }
            return target.getAbsolutePath();
        } catch (Exception ex) {
            throw new IllegalArgumentException("映射文件保存失败：" + ex.getMessage(), ex);
        }
    }
}
