package com.trade.service.filestorage.service;

import java.io.File;
import java.io.IOException;

import org.springframework.ui.Model;
import org.springframework.web.multipart.MultipartFile;

import com.trade.service.filestorage.entity.TFileStorage;
import com.trade.service.filestorage.enums.FileModuleEnum;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 文件存储 Service - Local
 */
public interface LocalFileService {

    /**
     * 新增文件保存 With File
     * 
     * @param sourceFile File对象
     * @param fileModule 文件模块枚举
     * @return TFileStorage对象
     * @throws IOException
     */
    TFileStorage addStorage(File sourceFile, FileModuleEnum fileModule) throws IOException;

    /**
     * 新增文件保存 With MultipartFile
     * 
     * @param multipartFile MultipartFile对象
     * @param fileModule 文件模块枚举
     * @return TFileStorage对象
     * @throws IOException
     */
    TFileStorage addStorage(MultipartFile multipartFile, FileModuleEnum fileModule) throws IOException;

    /**
     * 新增文件保存 With MultipartFile and originalName
     * 
     * @param multipartFile MultipartFile对象
     * @param fileModule 文件模块枚举
     * @param originalName 文件名
     * @return TFileStorage对象
     */
    TFileStorage addStorageWithOrigName(MultipartFile multipartFile, FileModuleEnum fileModule, String originalName)
            throws IOException;

    /**
     * 文件上传
     *
     * @param request request
     */
    void uploadFile(HttpServletRequest request, FileModuleEnum moduleDict) throws IOException;

    /**
     * 下载文件（根据文件id）
     *
     * @param request HttpServletRequest
     * @param res res
     * @param fileId fileId
     */
    void downloadFile(HttpServletRequest request, HttpServletResponse res, Long fileId);

    /**
     * 预览文件（加水印）
     * 
     * @param fileId 文件id
     * @param request HttpServletRequest
     * @param response HttpServletResponse
     * @param model Model
     * @return String
     */
    String previewFile(Long fileId, HttpServletRequest request, HttpServletResponse response, Model model);

    /**
     * 根据文件id获取文件信息
     * 
     * @param fileId 文件id
     * @return 文件信息
     */
    TFileStorage getFileById(Long fileId);
}
