package com.nailart.service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Description 文件存储服务接口，定义文件管理操作
 * @Classname FileStorageService
 * @Date 2025/7/19 17:19
 * @Created by 21616
 */
public interface FileStorageService {

    /**
     * 上传文件
     * @param bucketName 存储桶名称
     * @param filePath 文件路径
     * @param file 文件内容
     * @return 文件存储路径
     */
    String uploadFile(String bucketName, String filePath, MultipartFile file);

    /**
     * 上传文件（从输入流）
     * @param bucketName 存储桶名称
     * @param filePath 文件路径
     * @param inputStream 文件输入流
     * @param contentType 文件内容类型
     * @return 文件存储路径
     */
    String uploadFile(String bucketName, String filePath, InputStream inputStream, String contentType);

    /**
     * 下载文件
     * @param bucketName 存储桶名称
     * @param filePath 文件路径
     * @return 文件输入流
     */
    InputStream downloadFile(String bucketName, String filePath);

    /**
     * 删除文件
     * @param bucketName 存储桶名称
     * @param filePath 文件路径
     */
    void deleteFile(String bucketName, String filePath);

    /**
     * 检查文件是否存在
     * @param bucketName 存储桶名称
     * @param filePath 文件路径
     * @return 文件是否存在
     */
    boolean fileExists(String bucketName, String filePath);

    /**
     * 获取文件的预签名URL
     * @param bucketName 存储桶名称
     * @param filePath 文件路径
     * @param expirySeconds 过期时间（秒）
     * @return 预签名URL
     */
    String getFileUrl(String bucketName, String filePath, int expirySeconds);

    /**
     * 获取存储桶列表
     * @return 存储桶名称列表
     */
    List<String> listBuckets();

    /**
     * 检查存储桶是否存在
     * @param bucketName 存储桶名称
     * @return 存储桶是否存在
     */
    boolean bucketExists(String bucketName);

    /**
     * 创建存储桶
     * @param bucketName 存储桶名称
     */
    void createBucket(String bucketName);

    /**
     * 删除存储桶（必须为空）
     * @param bucketName 存储桶名称
     */
    void deleteBucket(String bucketName);
}
