/*
 * Copyright (c) 2023 codvision.com All Rights Reserved.
 */

package com.codvision.base.service;

import com.codvision.base.entity.FileUploadResult;
import com.codvision.base.entity.SysFile;
import com.codvision.base.entity.vo.SysFileVO;
import com.codvision.base.enums.StorageType;
import com.codvision.webcore.service.IBaseService;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;

/**
 * 系统文件 服务类
 *
 * @author lingee
 * @date 2023/11/16
 */
public interface ISysFileService extends IBaseService<SysFile, SysFileVO> {

    /**
     * 更新文件为有效状态
     *
     * @param fileName 文件名
     */
    void updateIsValidByFileName(String fileName);

    /**
     * 通过id删除文件管理
     *
     * @param ids 文件id
     */
    void deleteFile(List<Integer> ids);

    /**
     * 上传文件
     *
     * @param file        文件
     * @param storageType 文件存储类型
     * @return 上传结果
     */
    FileUploadResult uploadFile(MultipartFile file, StorageType storageType);

    /**
     * 读取oss文件
     *
     * @param bucket   桶名
     * @param fileName 文件名
     * @param response 响应
     */
    void getFile(String bucket, String fileName, HttpServletResponse response);

    /**
     * 下载文件
     *
     * @param bucket   空间名称
     * @param fileName 文件名
     * @param response 输出流
     */
    void download(String bucket, String fileName, HttpServletResponse response);

    /**
     * 预览文件
     *
     * @param bucket   空间名称
     * @param fileName 文件名称
     * @param response 输出流
     */
    void preview(String bucket, String fileName, HttpServletResponse response);

    /**
     * 根据文件路径获取文件流
     *
     * @param filePath 文件路径
     * @return 文件流
     */
    InputStream getFileStream(String filePath);
}
