package com.keyware.shandan.system.service;

import com.keyware.shandan.common.service.IBaseService;
import com.keyware.shandan.system.entity.SysFile;
import com.keyware.shandan.system.entity.SysFileChunk;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 * 系统文件表 服务类
 * </p>
 *
 * @author GuoXin
 * @since 2021-06-07
 */
public interface SysFileService extends IBaseService<SysFile, String> {

    /**
     * 根据文件的MD5值和文件名获取文件信息
     *
     * @param fileMd5 文件MD5值
     * @param name    文件名
     * @return 文件信息
     */
    SysFile getFileByMd5AndName(String fileMd5, String name);

    /**
     * 根据文件MD5和文件分片MD5获取文件分片
     *
     * @param fileMd5  文件MD5
     * @param chunkMd5 文件分片MD5
     * @return 文件分片数据
     */
    SysFileChunk getFileChunkByMd5(String fileMd5, String chunkMd5);

    /**
     * 单文件上传
     *
     * @param file    上传的文件
     * @param sysFile 文件信息
     * @return 文件信息
     * @throws Exception -
     */
    SysFile uploadFiles(MultipartFile file, SysFile sysFile) throws Exception;

    /**
     * 文件分片上传
     *
     * @param file     上传的文件分片
     * @param fileInfo 文件信息
     * @param chunk    文件分片的信息
     * @throws Exception -
     * @return
     */
    SysFile uploadFileChunk(MultipartFile file, SysFile fileInfo, SysFileChunk chunk) throws Exception;

    /**
     * 清除文件
     */
    void clearFiles();

    /**
     * 检查并自动创建目录层级，并保存文件目录关系
     * @param file 文件信息
     * @return 是否成功
     * @throws Exception -
     */
    Boolean autoCreateDirAndUpdateFile(SysFile file) throws Exception;

    /**
     * 从ES中删除文件索引
     * @param files 文件
     */
    void removeFileFromEs(List<SysFile> files);

    List<SysFile> listByDirId(String dirId);
}
