package com.pqs9300.service.uploadFiles;

import com.pqs9300.util.SocketSender;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * @Author: xuyang
 * @Description:
 */
public interface UploadFilesService {

    /**
     * 单文件上传
     * 获取文件信息
     * @param file
     * @param request
     * @param response
     * @param supIndex
     * @param lineIndex
     * @param stepCount
     * @param updateTime
     * @return
     */
    Map<String, Object> fileInformation(MultipartFile file, HttpServletRequest request, HttpServletResponse response, String supIndex, String lineIndex, Integer stepCount, String updateTime);

    /**
     * 判断上传的文件名和事务名称是否一致
     * @param supIndex
     * @param fileName
     * @param lineIndex
     * @param updateTime
     * @return
     */
    Boolean judgeFileName(String supIndex, String fileName,String lineIndex, String updateTime);

    /**
     * 单文件文件名不同，确认后修改文件名
     * @param file
     * @param request
     * @param response
     * @param supIndex
     * @param lineIndex
     * @param stepCount
     * @param updateTime
     * @return
     */
    Map<String, Object> fileCommit(MultipartFile file, HttpServletRequest request, HttpServletResponse response, String supIndex, String lineIndex, Integer stepCount, String updateTime);

    /**
     * 判断文件的类型
     * 告警单/预警单/反馈单 pdf/jepg/jpg/png/bmp/JPG/PNG
     * 测试报告 doc/docx/pdf
     * @param subffix
     * @return
     */
    Boolean judgeFileType(String subffix);

    /**
     * 将上传文件的路径写入数据库
     * @param stepCount
     * @param filePath
     * @param supIndex
     * @param lineIndex
     * @param updateTime
     */
    void updateFileUrl(Integer stepCount, String filePath, String supIndex,String lineIndex, String updateTime);

    /**
     * 判断是否需要修改文件的状态
     * @param supIndex
     * @param stepCount
     * @return
     */
    Boolean overRunLogList(String supIndex, Integer stepCount);

    /**
     * 获取文件类型 0：预警单 1：告警单
     * 判断预警单还是告警单 流程不同
     * @param supIndex
     * @return
     */
    Integer supIndexType(String supIndex);

    /**
     * 上传成功改变文件流程状态，执行下一步
     * @param supIndex
     * @param stepCount
     * @param type
     */
    void updateFileProgress(String supIndex, Integer stepCount, Integer type, SocketSender socketSender);

    /**
     * 多文件上传
     * @param file
     * @param request
     * @param response
     * @param supIndex
     * @param stepCount
     * @return
     */
    Map<String,Object> uploadFiles(MultipartFile file, HttpServletRequest request, HttpServletResponse response, String supIndex, Integer stepCount);

    /**
     * 多文件写入数据库
     * @param stepCount
     * @param filePath
     * @param fileName
     * @param supIndex
     */
    void updateFilesUrl(Integer stepCount, String filePath, String fileName, String supIndex);

}