package com.ytpm.oss;

import cn.hutool.core.util.StrUtil;
import com.ytpm.handle.CustomerException;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.InputStream;

@Slf4j(topic = "oss-util")
public final class OssUtil {
    private static StorageTemplate getStorageTemplate(OssProperties ossProperties) {
        return StorageFactory.createStorageTemplate(ossProperties);
    }

    /**
     * 上传文件(本地文件上传)
     *
     * @param file          本地文件
     * @param ossProperties 文件描述信息
     * @return 生成的文件名
     */
    public static String upload(File file, OssProperties ossProperties) {
        return getStorageTemplate(ossProperties).upload(file);
    }

    /**
     * 删除文件
     *
     * @param filename
     */
    public static boolean deleteFile(String filename, OssProperties ossProperties) {
        return getStorageTemplate(ossProperties).deleteFile(filename);
    }

    /**
     * 转存文件（把原来的文件再重新上传存储一遍）
     *
     * @param filename      文件名
     * @param ossProperties 文件描述
     * @return 新生成文件名
     */
    public static OssAttach restore(String filename, OssProperties ossProperties) {
        return getStorageTemplate(ossProperties).restore(filename);
    }

    /**
     * 获取文件url
     *
     * @param ossName       存储的文件名
     * @param ossProperties 文件描述
     * @return 文件url
     */
    public static String getUrl(String ossName, OssProperties ossProperties) {
        String url = getStorageTemplate(ossProperties).getUrl(ossName);
        if (StrUtil.isBlank(url)) {
            return null;
        }
        return url.replace(ossProperties.getEndpoint(), ossProperties.getDomain());
    }

    /**
     * 获取文件流
     *
     * @param ossName
     * @param ossProperties
     * @return
     */
    public static InputStream getStream(String ossName, OssProperties ossProperties) {
        try {
            return getStorageTemplate(ossProperties).getStream(ossName);
        } catch (Exception e) {
            throw new CustomerException(e.getMessage());
        }
    }
}
