package com.chushang.oss.service;

import com.chushang.common.core.exception.ResultException;
import com.chushang.common.core.util.FileUtils;
import com.chushang.common.core.util.IdUtils;
import com.chushang.common.core.util.StringUtils;
import com.chushang.oss.entity.FileSourceInfo;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;

public interface OssService {
    default String getPrefixPath(String fileName){
        String nanoID = IdUtils.getId(32);
        return getPrefixPath(nanoID, fileName);
    }


    /**
     * 文件上传
     * @param data    文件字节数组
     * @param info    文件信息
     * @return        返回http地址
     */
    default String upload(byte[] data, FileSourceInfo info, Boolean sealFlag, String formats){
        InputStream inputStream = new ByteArrayInputStream(data);
        // 为true 时 添加水印
        if (sealFlag && StringUtils.isNotEmpty(formats)){
//            if (StringUtils.isEmpty(formats)) throw new ResultException("添加水印时, 水印内容不能为空");
            inputStream = FileUtils.waterSeal(Arrays.stream(formats.split(",")).toList(), inputStream);
        }
        return upload(inputStream, info);
    }
    String getPrefixPath(String prefix, String filename);

    /**
     * 文件上传
     *
     * @param inputStream 文件字节数组
     * @param info        文件信息
     * @return 返回http地址
     */
    String upload(InputStream inputStream, FileSourceInfo info);
    default String upload(InputStream inputStream, FileSourceInfo info, Boolean sealFlag, String formats){
        // 为true 时 添加水印
        if (sealFlag && StringUtils.isNotEmpty(formats)){
//            if (StringUtils.isEmpty(formats)) throw new ResultException("添加水印时, 水印内容不能为空");
            inputStream = FileUtils.waterSeal(Arrays.stream(formats.split(",")).toList(), inputStream);
        }
        return upload(inputStream, info);
    }

    /**
     * 删除 cloud 中的文件
     * @param path 文件路径
     */
    void delFile(String path);

    /**
     * 批量删除
     */
    List<String> delFileBatch(List<String> keys);

    byte[] getFileBytes(FileSourceInfo info);

}
