package com.ruoyi.system.service.impl;

import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.DateUtils;

import com.ruoyi.system.entity.DragForm;
import com.ruoyi.system.mapper.DragFormMapper;
import com.ruoyi.system.service.IDragFormService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

/**
 * 动态表单
 * Service业务层处理
 *
 * @author ruoyi
 * @date 2023-07-12
 */
@Service
public class DragFormServiceImpl implements IDragFormService {

    @Autowired
    private DragFormMapper dragFormMapper;

    /**
     * 查询动态表单
     *
     * @param fId 动态表单
     *            主键
     * @return 动态表单
     */
    @Override
    public DragForm selectDragFormByFId(Long fId) {
        return dragFormMapper.selectDragFormByFId(fId);
    }

    /**
     * 查询动态表单
     * 列表
     *
     * @param dragForm 动态表单
     * @return 动态表单
     */
    @Override
    public List<DragForm> selectDragFormList(DragForm dragForm) {
        return dragFormMapper.selectDragFormList(dragForm);
    }

    /**
     * 新增动态表单
     *
     * @param dragForm 动态表单
     * @return 结果
     */
    @Override
    public int insertDragForm(DragForm dragForm) {
        String fileName = RuoYiConfig.getProfile() + UUID.randomUUID().toString() + ".html";
        // 创建表单源文件
        createForm(fileName, dragForm.getDfHtmlTemplate());
        // 使用租户名 加uuid 定义表单文件名称
        dragForm.setdfFliePath(fileName);
        dragForm.setCreateTime(DateUtils.getNowDate());
        return dragFormMapper.insertDragForm(dragForm);
    }

    /**
     * 修改动态表单
     *
     * @param dragForm 动态表单
     * @return 结果
     */
    @Override
    public int updateDragForm(DragForm dragForm) {
        // 修改的时候删除表单源文件后重新创建
        delFileForm(dragForm.getfId());
        dragForm.setUpdateTime(DateUtils.getNowDate());
        return dragFormMapper.updateDragForm(dragForm);
    }

    /**
     * 批量删除动态表单
     *
     * @param fIds 需要删除的动态表单
     *             主键
     * @return 结果
     */
    @Override
    public int deleteDragFormByFIds(Long[] fIds) {
        // 删除表单源文件
        for (Long fId : fIds) {
            delFileForm(fId);
        }
        return dragFormMapper.deleteDragFormByFIds(fIds);
    }

    /**
     * 删除动态表单
     * 信息
     *
     * @param fId 动态表单
     *            主键
     * @return 结果
     */
    @Override
    public int deleteDragFormByFId(Long fId) {

        // 删除表单源文件
        delFileForm(fId);
        return dragFormMapper.deleteDragFormByFId(fId);
    }


    /**
     * 删除表单源文件
     *
     * @param fId
     */
    public void delFileForm(Long fId) {
        DragForm dragForm = dragFormMapper.selectDragFormByFId(fId);
        File file = new File(dragForm.getdfFliePath());
        if (file.delete()) {
            System.out.println("删除文件成功！");
        } else {
            System.out.println("删除文件失败！");
        }
    }

    /**
     * 创建表单源文件
     *
     * @param pathName 生成文件路径以及文件名称
     * @param text     写入文件中的内容
     */
    public void createForm(String pathName, String text) {
        // 新增的同时生成文件 生成路径从配置文件读取
        File file = new File(pathName);
        try {
            if (file.createNewFile()) { // 判断当前文件是否存在，
                System.out.println("创建文件成功！");
            } else {
                System.out.println("文件已经存在不需要重复创建");
            }
            FileWriter writer = new FileWriter(file);
            writer.write(text);
            writer.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
