package com.jiayue.insu.incloud.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.*;

/**
 * @description:
 * @author: zhangchenglong
 * @createDate: 2023/6/28
 * @version: 1.0
 */
@Slf4j
@Component
public class FileUtils {

    @Autowired
    private VelocityEngine velocityEngine;

    /**
     * 功能描述: 创建文件
     *
     * @param:
     * @return:
     * @auther: bizy
     * @date: 2018/7/18 15:47 下午
     */
    public void creatFile(File file, StringWriter writer) {
        FileOutputStream os = null;
        try {
            boolean res = file.createNewFile();
            if (res) {
                // 创建文件
                os = new FileOutputStream(file);
                // 采用UTF-8字符集
                os.write(writer.toString().getBytes("UTF-8"));
                os.flush();
            } else {
                log.warn(file.getName() + ":文件已存在");
            }
        } catch (IOException e) {
            e.printStackTrace();
            log.warn(file.getName() + ":文件创建失败");
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    log.error("文件生成关闭流失败", e);
                }
            }
        }
    }

    /**
     * 根据文件模板，创建文件
     *
     * @param filePath        文件路径
     * @param fileName        文件名
     * @param templateName    模板名称
     * @param velocityContext 模板数据内容
     * @return
     */
    public File createFileByVelocityTemplate(String filePath, String fileName, String templateName, VelocityContext velocityContext) {
        // 获取模板
        String vmsPath = SystermUtils.getResourceBasePath() + templateName;
        File file = null;
        // 创建模板
        Template template = this.velocityEngine.getTemplate(vmsPath);
        // 如果模板不为空
        if (template != null) {
            StringWriter writer;
            writer = new StringWriter();
            // 写入文件内容
            template.merge(velocityContext, writer);
            log.info(filePath);
            // 创建文件
            File fileUrl = new File(filePath);
            // 判断目录是否存在，如果不存在则创建路径
            if (!fileUrl.exists()) {
                fileUrl.mkdirs();
            }
            file = new File(filePath + File.separatorChar + fileName);
            // 创建文件
            this.creatFile(file, writer);
        }
        return file;
    }
}
