package com.backendsys.service.SDKService.SDKTencent;

import com.backendsys.entity.SDKEntity.TencentCOSCredentialsDTO;
import com.backendsys.entity.System.SysFile.SysFileDTO;
import com.backendsys.entity.Tencent.TencentCos.MultipartUploadRespDTO;
import com.backendsys.entity.Tencent.TencentCos.MultipartUploadDTO;
import com.backendsys.entity.Tencent.TencentCos.TempCredentialsDTO;
import com.backendsys.entity.Tencent.TencentCos.UploadOriginDTO;
import com.backendsys.entity.Tencent.TencentCos.UploadOriginResp;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.PartETag;
import com.qcloud.cos.transfer.TransferManager;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * 腾讯云 对象存储
 */
public interface SDKTencentCOSService {

//    // 获取临时上传令牌 (仅用于前端单文件上传、分片上传)
//    TempCredentialsDTO getTempCredentials(String allowPrefix);
//
//    // [储存桶操作] 获得当前储存桶的文件列表
//    Map<String, Object> getBucketList(String next_marker);



    // 获取临时上传令牌 (数智人)
    TencentCOSCredentialsDTO getIvhTempCredentials(String appKey, String accessToken);

    // 高级操作
    // - [腾讯-数智人] 上传素材文件 (临时目录) 在用
    TransferManager createTransferManager(COSClient cosClient);
    void shutdownTransferManager(TransferManager transferManager);


    // 将 远程文件 异步保存到 储存桶 (小文件) (仅内部使用，有内存泄露的风险)
    UploadOriginResp uploadOrigin(UploadOriginDTO uploadOriginDTO) throws IOException;

//    // 压缩图片
//    File compressImage(InputStream inputStream, String suffix) throws IOException;


//    // -- 简单上传 -------------------------------------------------------
//    MultipartUploadRespDTO simpleUpload(MultipartFile file);

//    // -- 分块上传 -------------------------------------------------------
//
//    // 查询已上传分块
//    List<PartETag> listParts(String uploadId, String key);
//
//    // 查询分块上传任务 (获得全部分块任务ID - uploadId)
//    List<String> listMultipartUploads(String key);
//
//    // 初始化分块上传 -> 查询分块上传任务 -> 上传分块 -> 查询已上传分块任务 -> 完成分块上传 -> 终止分块上传
//    MultipartUploadRespDTO multipartUpload(MultipartUploadDTO multipartUploadDTO);
//
//    // 终止分块上传 (uploadId)
//    Map<String, Object> abortMultipartUpload(MultipartUploadDTO multipartUploadDTO);
//
//    // -- 文件列表 -------------------------------------------------------
//
//    // 删除文件
//    Map<String, Object> removeUploadFile(SysFileDTO sysFileDTO);

}
