package jnpf.doclibrary.service;

import cn.xuyanwu.spring.file.storage.FileInfo;
import com.github.pagehelper.PageInfo;
import jnpf.entity.Information;
import jnpf.exception.HandleException;
import jnpf.model.doclibrary.dto.*;
import jnpf.model.doclibrary.vo.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 共享空间服务
 *
 * @author yanwenfu
 * @create 2023-07-20
 */
public interface SpaceService {

    /**
     * 点击共享空间/空间/文件夹查询下面的所有内容
     * @param pid 父id
     * @return java.util.List<jnpf.model.doclibrary.vo.MiniInformationVo>
     */
    List<MiniInformationVo> getMyResourceList(String pid);

    /**
     * 点击共享空间/空间/文件夹查询下面的所有内容(分页)
     * @param pid 父id
     * @param queryDto 查询条件
     * @return com.github.pagehelper.PageInfo<jnpf.model.doclibrary.vo.MiniInformationVo>
     */
    PageInfo<MiniInformationVo> getMyResourcePage(String pid, InformationQueryDto queryDto);

    /**
     * 查询空间/文件夹/文件id占用空间大小
     * @param id 空间/文件夹/文件id
     * @return jnpf.model.doclibrary.vo.SpaceVo
     */
    SpaceVo getInformationSpace(String id);

    /**
     * 查询空间/文件夹/文件关联的成员
     * @param id 空间/文件夹/文件id
     * @return java.util.List<jnpf.model.doclibrary.vo.UserInfoVo>
     */
    List<UserInfoVo> getInformationMemberList(String id);

    /*
     * 查看空间/文件夹/文件信息
     * @param id 空间/文件夹/文件id
     * @return jnpf.model.doclibrary.vo.InformationDetailVo
     */
    InformationDetailVo getInformation(String id) throws Exception;

    /**
     * 新增/更新浏览记录
     * @param viewDto 浏览记录dto
     */
    void addViewRecord(ViewDto viewDto);

    /**
     * 回收站 - 列表
     * @param queryType 查询类型(1: 文件夹/2: 空间)
     * @param queryCondition 查询条件(文件名)
     * @return java.util.List<jnpf.model.doclibrary.vo.RubbishInfoVo>
     */
    List<RubbishInfoVo> getRubbishList(Integer queryType, String queryCondition);

    /**
     * 回收站 - 列表(分页)
     * @param queryDto 查询条件
     * @return com.github.pagehelper.PageInfo<jnpf.model.doclibrary.vo.RubbishInfoVo>
     */
    PageInfo<RubbishInfoVo> getRubbishPage(RubbishQueryDto queryDto);

    /**
     * 回收站 - 彻底删除
     * @param rubbishId 垃圾id
     */
    void deleteRubbish(String rubbishId);

    /**
     * 回收站 - 恢复(空间/文件夹/文件)
     * @param undeleteDto 撤销删除dto
     * @throws HandleException 操作异常
     */
    void updateToUndelete(UndeleteDto undeleteDto) throws HandleException;

    /**
     * 回收站 - 恢复资源验证
     * @param rubbishId 垃圾id
     * @return jnpf.model.doclibrary.vo.CheckRubbishVo
     */
    CheckRubbishVo checkUndelete(String rubbishId);

    /**
     * 新增文档/表格/PPT
     * @param uploadDto 上传dto
     * @return jnpf.entity.Information
     */
    Information addInformationFile(UploadDto uploadDto) throws Exception;

    /**
     * 批量新增资源库数据
     * @param list 列表
     */
    void addInformationDetails(List<InfoDetailDto> list);

    /**
     * 删除过期的回收站资料
     */
    void deleteOverdueRubbish(String userId);

    /**
     * 删除过期的浏览记录
     */
    void deleteOverdueViewRecord();

    void singleFileUploads(HttpServletRequest request, HttpServletResponse response) throws Exception;

    /**
     * 上传文件
     * @param multipartFile 文件
     * @param fileName 文件名
     * @return cn.xuyanwu.spring.file.storage.FileInfo
     */
    FileInfo uploadFile(MultipartFile multipartFile, String fileName);

    /**
     * 查询我的资源文件夹
     * @param keyWord 关键字
     * @return java.util.List<jnpf.model.doclibrary.vo.MiniInformationVo>
     */
    List<MiniInformationTreeVo> queryMyResourceFolder(String keyWord);

    /**
     * 查询我的文件
     * @param req 请求参数
     * @return com.github.pagehelper.PageInfo<jnpf.model.doclibrary.vo.MiniInformationVo>
     */
    PageInfo<MiniInformationVo> queryMyFilesForFolderId(QueryMyFilesReq req);
}
