package com.chinaweal.aiccs.common.util.filestorage;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

/**
 * 文件存储下载服务.
 *
 * @author yangmc
 * @date 2021-11-06
 * @time 13:24
 */
public interface FileStorageService {

    /**
     * 复制文件到指定目录，可选：
     *
     * @param destPath 服务端路径，可以为{@code null} 或者相对路径或绝对路径
     * @param file     文件
     * @return 是否复制成功
     */
    boolean writeFromFile(String destPath, File file);

    /**
     * 写入文件到指定目录
     *
     * @param path       服务端文件路径
     * @param fileStream 文件流
     * @return 是否写入成功
     */
    boolean writeFromStream(String path, InputStream fileStream);

    /**
     * 写入文件到指定目录
     *
     * @param path       服务端路径
     * @param fileName   文件名
     * @param fileStream 文件流
     * @return 是否写入成功
     */
    boolean writeFromStream(String path, String fileName, InputStream fileStream);

    /**
     * 下载文件
     *
     * @param path    文件路径，包含文件名
     * @param outFile 输出文件或目录，当为目录时使用服务端文件名
     */
    void writeToFile(String path, File outFile);

    /**
     * 下载文件
     *
     * @param path     文件所在路径，不包含文件名
     * @param fileName 文件名
     * @param outFile  输出文件或目录，当为目录时使用服务端文件名
     */
    void writeToFile(String path, String fileName, File outFile);

    /**
     * 下载文件到输出流
     *
     * @param path 文件路径，包含文件名
     * @param out  输出位
     */
    void writeToStream(String path, OutputStream out);


    /**
     * 下载文件到输出流
     *
     * @param path     文件路径
     * @param fileName 文件名
     * @param out      输出位置
     */
    void writeToStream(String path, String fileName, OutputStream out);

    /**
     * 删除文件
     * @param path
     * @return
     */
    boolean delFile(String path);

    /**
     * 删除文件夹
     * @param dirPath
     * @return
     */
    boolean delDir(String dirPath);

    List<String> getFtpFileNames(String path);
}
