package com.yunfeiyun.agmp.common.framework.oss.cloud;

import com.alibaba.fastjson2.util.DateUtils;
import com.yunfeiyun.agmp.common.framework.config.properties.OSSProperties;
import com.yunfeiyun.agmp.common.utils.StringUtils;

import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * 云存储(支持七牛、阿里云、腾讯云)
 *
 * @author 杨晓辉
 */
public abstract class AbstractCloudStorageService {
    /** 云存储配置信息 */
    OSSProperties config;

    /**
     * 文件路径
     * @param prefix 前缀
     * @param suffix 后缀
     * @return 返回上传路径
     */
    public String getPath(String prefix,  String suffix,String biztype,String baseName) {
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        String fileName = StringUtils.format("{}{}{}{}{}{}_{}.{}",
                prefix,
                biztype,
                "/",
                DateUtils.format(new Date(), "yyyyMMdd"),
                "/",
                baseName,
                uuid ,
                suffix);

        return fileName;
    }

    /**
     * 文件上传
     * @param data    文件字节数组
     * @param path    文件路径，包含文件名
     * @return        返回http地址
     */
    public abstract String upload(byte[] data, String path);

    /**
     * 文件上传
     * @param data     文件字节数组
     * @param suffix   后缀
     * @return         返回http地址
     */
    public abstract String uploadSuffix(byte[] data, String suffix, String bizType,String baseName);

    /**
     * 文件上传
     * @param inputStream   字节流
     * @param path          文件路径，包含文件名
     * @return              返回http地址
     */
    public abstract String upload(InputStream inputStream, String path);

    /**
     * 文件上传
     * @param inputStream  字节流
     * @param suffix       后缀
     * @return             返回http地址
     */
    public abstract String uploadSuffix(InputStream inputStream, String suffix, String bizType,String baseName);

    /**
     * 文件删除
     * @param resOssUrl  字节流
     * @return
     */
    public abstract  List<String> delete(List<String> resOssUrl);

    /**
     * 文件路径截取
     * @param resOssUrl  resOssUrl
     * @return
     */
    public abstract String padSuffix(String resOssUrl)  throws Exception;
}
