package com.yfd.platform.system.service.impl;

import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.config.HttpServerConfig;
import com.yfd.platform.modules.basedata.domain.AlgorithmModel;
import com.yfd.platform.system.domain.SysConfig;
import com.yfd.platform.system.mapper.SysConfigMapper;
import com.yfd.platform.system.service.ISysConfigService;
import com.yfd.platform.utils.FileUtil;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.Objects;

/**
 * <p>
 * 系统全局配置 服务实现类
 * </p>
 *
 *
 * @since 2022-01-19
 */
@Service
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements ISysConfigService {

    @Resource
    private UserServiceImpl currentUser;

    @Resource
    private HttpServerConfig httpServerConfig;

    /**********************************
     * 用途说明: 上传系统操作手册
     * 参数说明 file 文件域
     * 返回值说明: void
     ***********************************/
    @Override
    public void uploadModelFile(MultipartFile file) {
        // 文件存储地址
        String fileName =
                IdUtil.fastSimpleUUID() + "." + FileUtil.getExtensionName(file.getOriginalFilename());
        // 上传文件
        String name =
                Objects.requireNonNull(FileUtil.upload(file, httpServerConfig.getDocumentPath(), fileName)).getName();
        LambdaUpdateWrapper<SysConfig> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(SysConfig::getCustom2, name);
        this.update(updateWrapper);
    }

    /**********************************
     * 用途说明: 下载操作手册
     * 参数说明 fileName 文件名称
     * 参数说明 response
     * 返回值说明: void
     ***********************************/
    @Override
    public void downloadConfigFile(String fileName, HttpServletResponse response) {
        boolean exist = FileUtil.exist(httpServerConfig.getDocumentPath() + fileName);
        if (!exist) {
            throw new RuntimeException("文件不存在");
        }
        File file = new File(httpServerConfig.getDocumentPath() + fileName);
        FileUtil.downloadFile(null, response, file, false);
    }

    /**********************************
     * 用途说明: 删除文件
     * 参数说明 id 配置id
     * 参数说明 fileName 文件名称
     * 返回值说明: boolean
     ***********************************/
    @Override
    public boolean deleteConfigFile(String id, String fileName) {
        boolean exist = FileUtil.exist(httpServerConfig.getDocumentPath() + fileName);
        if (!exist) {
            throw new RuntimeException("删除失败");
        }
        FileUtil.del(httpServerConfig.getDocumentPath() + fileName);
        LambdaUpdateWrapper<SysConfig> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SysConfig::getId, id).set(SysConfig::getCustom2, "");
        return this.update(updateWrapper);
    }
}
