package com.fs.file.service;

import com.fs.file.domain.MiniappUploadFile;
import com.fs.file.vo.CosPostPolicyVO;
import com.fs.file.vo.CosSTSTokenVO;
import com.fs.file.vo.UploadCompleteReqVO;

import java.util.List;

/**
 * 小程序大文件上传服务
 *
 * @author fs
 */
public interface IMiniappUploadService {

    /**
     * 获取 COS 临时密钥（用于小程序直传）
     *
     * @param userId 用户ID
     * @return 临时密钥信息
     */
    CosSTSTokenVO getSTSToken(String userId);

    /**
     * 生成 COS POST Policy 签名（用于 PostObject 上传方式）
     *
     * @param userId 用户ID
     * @param ext 文件扩展名
     * @return POST Policy 签名信息
     */
    CosPostPolicyVO generatePostPolicy(String userId, String ext);

    /**
     * 上传完成回调
     *
     * @param userId 用户ID
     * @param reqVO 请求参数
     * @return 文件记录
     */
    MiniappUploadFile uploadComplete(String userId, UploadCompleteReqVO reqVO);

    /**
     * 秒传检查
     *
     * @param userId 用户ID
     * @param fileMd5 文件MD5
     * @return 文件记录，如果不存在返回null
     */
    MiniappUploadFile checkFastUpload(String userId, String fileMd5);

    /**
     * 根据业务查询文件列表
     *
     * @param userId 用户ID
     * @param bizType 业务类型
     * @param bizId 业务ID
     * @return 文件列表
     */
    List<MiniappUploadFile> listByBiz(String userId, String bizType, String bizId);

    /**
     * 查询用户的文件列表
     *
     * @param userId 用户ID
     * @return 文件列表
     */
    List<MiniappUploadFile> listByUserId(String userId);

    /**
     * 删除文件
     *
     * @param userId 用户ID
     * @param id 文件ID
     * @return 是否成功
     */
    boolean deleteById(String userId, Long id);

    /**
     * 批量删除文件
     *
     * @param userId 用户ID
     * @param ids ID列表
     * @return 是否成功
     */
    boolean deleteByIds(String userId, List<Long> ids);
}
