package cn.meowrain.aioj.backend.fileservice.storage;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * 文件存储策略接口
 * 支持多种存储方式：本地存储、腾讯云COS、阿里云OSS等
 *
 * @author meowrain
 * @since 2026-01-10
 */
public interface FileStorageStrategy {

    /**
     * 上传文件
     *
     * @param file     文件
     * @param filePath 文件存储路径
     * @return 文件访问URL
     * @throws IOException 上传失败时抛出
     */
    String upload(MultipartFile file, String filePath) throws IOException;

    /**
     * 上传文件流
     *
     * @param inputStream 文件流
     * @param filePath    文件存储路径
     * @param fileSize    文件大小
     * @return 文件访问URL
     * @throws IOException 上传失败时抛出
     */
    String upload(InputStream inputStream, String filePath, long fileSize) throws IOException;

    /**
     * 删除文件
     *
     * @param filePath 文件存储路径
     * @return 是否删除成功
     */
    boolean delete(String filePath);

    /**
     * 判断文件是否存在
     *
     * @param filePath 文件存储路径
     * @return 是否存在
     */
    boolean exists(String filePath);

    /**
     * 获取文件访问URL
     *
     * @param filePath 文件存储路径
     * @return 文件访问URL
     */
    String getFileUrl(String filePath);

    /**
     * 获取存储类型标识
     *
     * @return 存储类型，如 LOCAL、COS、OSS
     */
    String getStorageType();
}
