package jnpf.doclibrary.service;

import com.github.pagehelper.PageInfo;
import jnpf.model.doclibrary.dto.FileQueryDto;
import jnpf.model.doclibrary.dto.SpaceDto;
import jnpf.model.doclibrary.vo.InformationAuthorityVo;
import jnpf.model.doclibrary.vo.InformationVo;

import java.util.List;

/**
 * 资料库服务
 *
 * @author yanwenfu
 * @create 2023-07-20
 */
public interface DocLibraryService {

    /** 
     * 获取-与我相关的文件列表
     * @param fileQueryDto 筛选参数
     * @return 返回值
     */
    List<InformationVo> relatedToMeFile(FileQueryDto fileQueryDto);

    /**
     * 获取最近查看列表
     * @param fileQueryDto 参数
     * @return 返回值
     */

    List<InformationVo> recentlyViewed(FileQueryDto fileQueryDto);

    /**
     * 重命名
     * @param id 空间/文件夹/文件id
     * @param fileQueryDto 文件信息
     * @return 返回值
     */
    int rename(String id, FileQueryDto fileQueryDto);

    /**
     * 空间/文件夹/文件权限
     * @param id 空间/文件夹/文件id
     * @return 返回值
     */
    Integer userPermissions(String id);

    /**
     * 删除空间/文件夹/文件
     * @param id 删除空间/文件夹/文件id
     * @return 返回值
     */
    int deleteInformation(String id);

    /**
     * 空间/文件夹/文件下成员列表
     * @param id 空间/文件夹/文件id
     * @return 返回值
     */
    List<InformationAuthorityVo> userList(String id);

    /**
     * 转移所有权
     * @param id 空间/文件夹/文件id
     */
    void transferOwnership(String id , FileQueryDto fileQueryDto);

    /**
     * 修改用户权限
     * @param id 用户文件权限关联id
     * @param informationAuthorityVo 参数
     */
    void editPermissions(String id, InformationAuthorityVo informationAuthorityVo);

    /**
     * 移除成员
     * @param id 用户文件权限关联id
     */
    void removeUser(String id);

    /**
     * 新增空间
     * @param spaceDto 空间信息
     */
    void space(SpaceDto spaceDto);

    /**
     * 新增文件夹
     * @param spaceDto 文件夹信息
     */
    void folder(SpaceDto spaceDto);

    /**
     * 移动文件夹/文件
     * @param id 文件夹/文件id
     * @param fileQueryDto 移动到..
     */
    void move(String id,FileQueryDto fileQueryDto);

    /**
     * 与我相关的文件分页列表
     * @param fileQueryDto 搜索参数
     * @return 返回值
     */
    PageInfo<InformationVo> relatedToMeFilePage(FileQueryDto fileQueryDto);

    /**
     * 获取--与我相关分页
     * @param fileQueryDto 搜索参数
     * @return 返回值
     */
    PageInfo<InformationVo> recentlyViewedPage(FileQueryDto fileQueryDto);

    /**
     * 退出空间
     * @param id 空间id
     */
    Integer exitSpace(String id);

    /**
     * 批量编辑成员权限
     * @param id 空间/文件夹/文件id
     * @param fileQueryDto 操作信息
     */
    void editPermissionsBatch(String id, FileQueryDto fileQueryDto);

    /**
     * 批量移除成员
     * @param informationAuthorityVos 需要移除的成员信息
     * @return 返回值
     */
    void removeUserBatch(List<InformationAuthorityVo> informationAuthorityVos);

    /**
     * 批量新增成员权限
     * @param spaceDto 权限信息
     */
    void membersBatch(SpaceDto spaceDto);

    void addInformationLog(String informationId, Integer classification, String userId, String userName, String action, List<String> userNameList);
    /** 验证是否是空间成员 */
    boolean checkSpaceMember(String id);

    Integer exitSpaceButton(String id);
}
