package jnpf.doclibrary.mapper;

import jnpf.model.doclibrary.dto.FileQueryDto;
import jnpf.model.doclibrary.dto.SpaceDto;
import jnpf.model.doclibrary.vo.InformationVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface InformationMapper {

    /**
     * 获取-与我相关的文件列表
     * @param fileQueryDto 文件搜索信息
     * @return 返回值
     */
    List<InformationVo> relatedToMeFile(@Param("fileQueryDto") FileQueryDto fileQueryDto, @Param("enabledMarkIds") List<String> enabledMarkIds);

    /**
     * 获取最近查看列表
     * @param fileQueryDto 文件搜索信息
     * @return 返回值
     */
    List<InformationVo> recentlyViewed(@Param("fileQueryDto") FileQueryDto fileQueryDto, @Param("enabledMarkIds") List<String> enabledMarkIds);

    /**
     * 重命名
     * @param id 文件id
     * @param fileQueryDto 修改后参数
     * @return 返回值
     */
    void rename(@Param("id") String id, @Param("fileQueryDto") FileQueryDto fileQueryDto);

    /**
     * 通过文件id获取文件信息
     * @param id 文件id
     * @return 返回值
     */
    InformationVo getInformationById(@Param("id") String id);

    /**
     * 删除空间/文件夹/文件
     * @param id 删除空间/文件夹/文件id
     * @param userId 用户id
     * @return 返回值
     */
    void delete(@Param("id") String id, @Param("userId") String userId);

    /**
     * 修改文件拥有者
     * @param id 删除空间/文件夹/文件id
     * @param userId 用户id
     * @param updateUserId 更新人id
     * @return 返回值
     */
    void updateOwner(@Param("id") String id, @Param("userId") String userId, @Param("updateUserId") String updateUserId);

    /**
     * 新增空间/文件夹
     * @param spaceDto 空间/文件夹信息
     * @param userId 用户id
     * @return 返回值
     */
    void addInformation(@Param("spaceDto") SpaceDto spaceDto, @Param("userId") String userId);

    /**
     * 获取文件夹及其下级路径信息
     * @param id 文件夹/文件id
     * @return 返回值
     */
    List<InformationVo> getSubordinate(@Param("id") String id);

    /**
     * 批量修改文件路径
     * @param id 文件id
     * @param path 修改后路径
     * @param userId 用户信息
     */
    void updateFilePath(@Param("id") String id , @Param("path") String path, @Param("userId") String userId);

    /**
     * 修改指定文件的父级id
     * @param id 文件id
     * @param toInformationId 父级id
     */
    void updateFilePId(@Param("id") String id, @Param("toInformationId") String toInformationId , @Param("userId") String userId);

    List<InformationVo> recentlyViewedMember(@Param("fileQueryDto") FileQueryDto fileQueryDto, @Param("enabledMarkIds") List<String> enabledMarkIds);

    /**
     * 得到企业下所有被标记为删除的id集合
     * @return 返回值
     */
    List<String> getEnabledMarkInformation();


    /**
     * 获取所有被删除的文件
     * @param enabledMarkIds 标记为删除的ids
     * @return 返回值
     */
    List<String> getDeleteIds(List<String> enabledMarkIds);
}