package com.yushu.system.service;

import java.util.List;
import com.yushu.system.domain.SysFileShare;
import com.yushu.system.domain.SysFileInfo;

/**
 * 文件分享Service接口
 * 
 * @author yushu
 * @date 2024-11-15
 */
public interface ISysFileShareService 
{
    /**
     * 查询文件分享
     * 
     * @param shareId 文件分享主键
     * @return 文件分享
     */
    public SysFileShare selectSysFileShareByShareId(Long shareId);

    /**
     * 根据分享码查询文件分享
     * 
     * @param shareCode 分享码
     * @return 文件分享
     */
    public SysFileShare selectSysFileShareByShareCode(String shareCode);

    /**
     * 查询文件分享列表
     * 
     * @param sysFileShare 文件分享
     * @return 文件分享集合
     */
    public List<SysFileShare> selectSysFileShareList(SysFileShare sysFileShare);

    /**
     * 创建文件分享
     * 
     * @param fileId 文件ID
     * @param expireDays 过期天数（0表示永久）
     * @param needPassword 是否需要密码
     * @return 文件分享
     */
    public SysFileShare createFileShare(Long fileId, Integer expireDays, Boolean needPassword);
    
    /**
     * 创建文件夹分享
     * 
     * @param folderId 文件夹ID
     * @param expireDays 过期天数（0表示永久）
     * @param needPassword 是否需要密码
     * @return 文件分享
     */
    public SysFileShare createFolderShare(Long folderId, Integer expireDays, Boolean needPassword);

    /**
     * 修改文件分享
     * 
     * @param sysFileShare 文件分享
     * @return 结果
     */
    public int updateSysFileShare(SysFileShare sysFileShare);

    /**
     * 批量删除文件分享
     * 
     * @param shareIds 需要删除的文件分享主键集合
     * @return 结果
     */
    public int deleteSysFileShareByShareIds(Long[] shareIds);

    /**
     * 删除文件分享信息
     * 
     * @param shareId 文件分享主键
     * @return 结果
     */
    public int deleteSysFileShareByShareId(Long shareId);
    
    /**
     * 验证分享
     * 
     * @param shareCode 分享码
     * @param password 提取码
     * @return 文件分享
     */
    public SysFileShare verifyShare(String shareCode, String password);
    
    /**
     * 根据文件ID查询用户的分享
     * 
     * @param fileId 文件ID
     * @return 文件分享
     */
    public SysFileShare selectSysFileShareByFileId(Long fileId);
    
    /**
     * 根据文件夹ID查询用户的分享
     * 
     * @param folderId 文件夹ID
     * @return 文件分享
     */
    public SysFileShare selectSysFileShareByFolderId(Long folderId);
    
    /**
     * 取消文件分享
     * 
     * @param fileId 文件ID
     * @return 结果
     */
    public int cancelFileShare(Long fileId);
    
    /**
     * 通过分享码下载文件
     * 
     * @param shareCode 分享码
     * @param response HTTP响应
     */
    public void downloadByShareCode(String shareCode, jakarta.servlet.http.HttpServletResponse response) throws Exception;
    
    /**
     * 通过分享码和文件ID下载文件（文件夹分享）
     * 
     * @param shareCode 分享码
     * @param fileId 文件ID
     * @param response HTTP响应
     */
    public void downloadFileByShareCode(String shareCode, Long fileId, jakarta.servlet.http.HttpServletResponse response) throws Exception;
    
    /**
     * 获取分享文件夹下的子文件夹内容
     * 
     * @param shareCode 分享码
     * @param folderId 文件夹ID
     * @return 文件列表
     */
    public List<SysFileInfo> getShareFolderFiles(String shareCode, Long folderId);
    
    /**
     * 下载文件夹（打包成ZIP）
     * 
     * @param shareCode 分享码
     * @param folderId 文件夹ID
     * @param response HTTP响应
     */
    public void downloadFolderByShareCode(String shareCode, Long folderId, jakarta.servlet.http.HttpServletResponse response) throws Exception;
    
    /**
     * 批量下载（打包成ZIP）
     * 
     * @param shareCode 分享码
     * @param fileIds 文件ID列表
     * @param folderIds 文件夹ID列表
     * @param response HTTP响应
     */
    public void downloadBatchByShareCode(String shareCode, List<Long> fileIds, List<Long> folderIds, jakarta.servlet.http.HttpServletResponse response) throws Exception;
}

