package org.xyzh.file.strategy;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @description 文件存储策略接口
 * @filename FileStorageStrategy.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-16
 */
public interface FileStorageStrategy {

    /**
     * @description 上传文件
     * @param file 文件对象
     * @param fileName 文件名
     * @param module 所属模块
     * @return String 文件存储路径
     * @throws IOException IO异常
     * @author yslg
     * @since 2025-10-16
     */
    String upload(MultipartFile file, String fileName, String module) throws IOException;

    /**
     * @description 下载文件
     * @param filePath 文件路径
     * @return byte[] 文件字节数组
     * @throws IOException IO异常
     * @author yslg
     * @since 2025-10-16
     */
    byte[] download(String filePath) throws IOException;

    /**
     * @description 删除文件
     * @param filePath 文件路径
     * @return boolean 删除是否成功
     * @throws IOException IO异常
     * @author yslg
     * @since 2025-10-16
     */
    boolean delete(String filePath) throws IOException;

    /**
     * @description 获取文件访问URL
     * @param filePath 文件路径
     * @return String 文件访问URL
     * @author yslg
     * @since 2025-10-16
     */
    String getFileUrl(String filePath);

    /**
     * @description 获取存储类型
     * @return String 存储类型
     * @author yslg
     * @since 2025-10-16
     */
    String getStorageType();
}

