package jnpf.doclibrary.mapper;

import jnpf.entity.Information;
import jnpf.entity.InformationRubbish;
import jnpf.model.doclibrary.dto.QueryMyFilesReq;
import jnpf.model.doclibrary.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 共享空间mapper
 *
 * @author yanwenfu
 * @create 2023-07-20
 */
public interface SpaceMapper {

    /**
     * 查询资源中我拥有权限的
     * @param userId 用户id
     * @param infoIds 资源ids
     * @return java.util.List<java.lang.String>
     */
    List<String> getMyInfoIdByPath(@Param("userId") String userId, @Param("list") List<String> infoIds);

    /**
     * 查询资源列表
     * @param ids 资源ids
     * @param queryCondition 查询条件(名称)
     * @param queryType 查询类型
     * @return java.util.List<jnpf.model.doclibrary.vo.MiniInformationVo>
     */
    List<MiniInformationVo> getInformationList(@Param("list") List<String> ids, @Param("queryCondition") String queryCondition, @Param("queryType") String queryType);

    /**
     * 根据关键字查询配置信息
     * @param key 关键字
     * @return java.lang.Integer
     */
    String getCommonConfigByKey(String key);

    /**
     * 查询已使用空间
     * @param id 空间/文件夹/文件id
     * @param delIds 被删除的
     * @return java.lang.Double
     */
    Double getUsedSpaceSize(@Param("id") String id, @Param("list") List<String> delIds);

    /**
     * 查询被删除的部分
     * @param id 空间/文件夹/文件id
     * @return java.util.List<java.lang.String>
     */
    List<String> getDeletedFileIds(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);

    /**
     * 查看最近浏览记录
     * @param id 空间/文件夹/文件id
     * @return jnpf.model.doclibrary.vo.RecentlyViewedVo
     */
    RecentlyViewedVo getRecentlyViewInfo(String id);

    /**
     * 查看用户最近浏览记录
     * @param userId 用户id
     * @param informationId 资料id
     * @return jnpf.model.doclibrary.vo.RecentlyViewedVo
     */
    RecentlyViewedVo getRecentlyViewByUser(@Param("userId") String userId, @Param("informationId") String informationId);

    /**
     * 更新用户浏览记录
     * @param id 记录id
     * @return int
     */
    int updateRecentlyViewInfo(String id);

    /**
     * 新增用户浏览记录
     * @param id 记录id
     * @param informationId 记录id
     * @param userId 用户id
     * @return int
     */
    int addRecentlyViewRecord(@Param("id") String id, @Param("informationId") String informationId, @Param("userId") String userId);

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

    /**
     * 通过ids查询回收站记录
     * @param rubbishIds 垃圾ids
     * @return java.util.List<jnpf.model.doclibrary.vo.RubbishInfoVo>
     */
    List<RubbishInfoVo> getRubbishListByIds(@Param("list") List<String> rubbishIds);

    /**
     * 恢复为未删除
     * @param ids 资料ids
     * @param userId 操作人
     * @return int
     */
    int updateToUndelete(@Param("list") List<String> ids, @Param("userId") String userId);

    /**
     * 恢复为未删除
     * @param informationId 资料id
     * @param userId 操作人
     * @return int
     */
    int updateToUndeleteById(@Param("informationId") String informationId, @Param("userId") String userId);

    /**
     * 删除回收站记录
     * @param rubbishIds 垃圾ids
     * @return int
     */
    int deleteRubbishRecord(@Param("list") List<String> rubbishIds);

    /**
     * 查询回收站记录
     * @param rubbishId 垃圾id
     * @return jnpf.model.doclibrary.vo.RubbishInfoVo
     */
    RubbishInfoVo getRubbishById(String rubbishId);

    /**
     * 根据path查询资源
     * @param informationId 资源id
     * @return java.util.List<java.lang.String>
     */
    List<String> getInformationByPath(String informationId);

    /**
     * 根据ids的path查询资源
     * @param informationIds 资源ids
     * @return java.util.List<java.lang.String>
     */
    List<String> getInformationByIdsPath(@Param("list") List<String> informationIds);

    /**
     * 根据资料id删除回收站记录
     * @param infoIds 资料ids
     * @return int
     */
    int deleteRubbishByInfoIds(@Param("list") List<String> infoIds);

    /**
     * 根据资料id删除浏览记录
     * @param infoIds 资料ids
     * @return int
     */
    int deleteViewByInfoIds(@Param("list") List<String> infoIds);

    /**
     * 根据资料id删除资料相关权限
     * @param infoIds 资料ids
     * @return int
     */
    int deleteAuthorityByInfoIds(@Param("list") List<String> infoIds);

    /**
     * 根据资料id删除资料记录
     * @param infoIds 资料ids
     * @return int
     */
    int deleteInformationByInfoIds(@Param("list") List<String> infoIds);

    /**
     * 查询资源path
     * @param informationId 资源id
     * @return java.lang.String
     */
    String getInformationPath(String informationId);

    /**
     * 根据文件路径查询路径上的删除情况
     * @param filePath 文件路径
     * @return java.util.List<jnpf.model.doclibrary.vo.DeleteInfoVo>
     */
    List<DeleteInfoVo> getDeleteInfoByPath(String filePath);

    /**
     * 恢复文件到指定父级
     * @param informationId 资源id
     * @param pid 父id
     * @param path 路径
     * @param userId 操作人
     * @return int
     */
    int updateUndeleteToSpace(@Param("informationId") String informationId, @Param("pid") String pid, @Param("path") String path, @Param("userId") String userId);

    /**
     * 查询空间信息
     * @param ids 空间ids
     * @return java.util.List<jnpf.model.doclibrary.vo.SpaceInfoVo>
     */
    List<SpaceInfoVo> getSpaceNameList(@Param("list") List<String> ids);

    /**
     * 新增资源
     * @param information 资源
     * @return int
     */
    int addInformation(Information information);

    /**
     * 删除过期的浏览记录
     * @return int
     */
    int deleteOverdueViewRecord();

    /**
     * 查询过期的垃圾文件
     * @param keepDay 有效期
     * @return java.util.List<jnpf.entity.InformationRubbish>
     */
    List<InformationRubbish> getExpireRubbish(@Param("keepDay") String keepDay, @Param("userId") String userId);

    /**
     * 查出完整路径中包含infoIds的并且我拥有权限的文件/文件夹/空间
     * @param infoIds 资源ids
     * @return java.util.List<java.lang.String>
     */
    List<String> getMyResourcePath(@Param("list") List<String> infoIds);

    /**
     * 查询所有资源中我拥有权限的
     * @param userId 用户id
     * @return java.util.List<java.lang.String>
     */
    List<String> getMyRootInfoIdByPath(String userId);

    /**
     * 更新资源大小
     * @param informationId 资源id
     * @param userId 操作人
     * @return int
     */
    int updateFileSize(@Param("informationId") String informationId, @Param("fileSize") Long fileSize, @Param("userId") String userId);

    /**
     * 查询本级和子级资源
     * @param informationId 资源id
     * @return java.util.List<java.lang.String>
     */
    List<String> getChildrenInfoList(String informationId);

    /**
     * 查询所有子级
     * @param pid 父id
     * @return java.util.List<java.lang.String>
     */
    List<String> getAllByPid(String pid);

    /**
     * 查询回收站资源占用空间
     * @param informationId 资源id
     * @return java.lang.Double
     */
    Double getRubbishUsedSpace(String informationId);

    /**
     * 查询我的文件
     * @param folderName 文件夹名称
     * @param ids 文件夹ids
     * @return java.util.List<jnpf.model.doclibrary.vo.MiniInformationTreeVo>
     */
    List<MiniInformationTreeVo> queryMyResourceFolder(@Param("folderName")  String folderName, @Param("ids")  List<String> ids);

    /**
     * 查询所有有权限的资料id
     * @param userId 用户id
     * @return java.util.List<java.lang.String>
     */
    List<String> queryAllPowerInfoIds(@Param("userId") String userId);

    /**
     * 查询我的文件
     * @param params 参数
     * @return java.util.List<jnpf.model.doclibrary.vo.MiniInformationVo>
     */
    List<MiniInformationVo> queryMyFilesForFolderId(@Param("params") QueryMyFilesReq params);
}
