package com.changhu.support.minio.service;

import io.minio.messages.Bucket;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.List;
import java.util.Set;

/**
 * fileName: MinioService
 * author: LuoZhun
 * createTime: 2023/11/10 17:30
 * description: minio service
 */
public interface MinioService {

    /**
     * 查看指定bucket是否存在
     *
     * @param bucketName 桶名称
     * @return 是否存在
     */
    boolean bucketExists(String bucketName);

    /**
     * 创建桶
     *
     * @param bucketName 桶名称
     * @return 床架结果
     */
    boolean createBucket(String bucketName);

    /**
     * 删除bucket
     *
     * @param bucketName 桶名称
     * @return 删除结果
     */
    boolean removeBucket(String bucketName);

    /**
     * 获取所有的bucket
     *
     * @return bucket列表
     */
    List<Bucket> getAllBuckets();

    /**
     * 文件上传
     *
     * @param file 需要上传的文件
     * @return 服务器地址
     */
    String upload(MultipartFile file);

    String upload(MultipartFile file, String baseDir);

    String upload(File file, String baseDir);

    void removeFile(String path);

    void removeFiles(Set<String> paths);

    /**
     * 预览文件
     *
     * @param fileName 文件名
     * @return 预览地址
     */
    String preview(String fileName);

    /**
     * 下载文件
     *
     * @param fileName 文件名
     * @param res      响应流
     */
    void download(String fileName, HttpServletResponse res);

    String getResignedObjectUrl(String bucketName, String objectName);

}
