package jnpf.doclibrary.mapper;

import jnpf.model.doclibrary.dto.InformationAuthorityDto;
import jnpf.model.doclibrary.vo.InformationAuthorityVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface InformationAuthorityMapper {

    /**
     * 获取文件权限
     * @param informationId 空间/文件夹/文件/文档id
     * @param userId 用户id
     * @return 返回值
     */
    Integer getInformationAuthority(@Param("informationId") String informationId, @Param("userId") String userId);

    /**
     * 向上查看文件有无权限
     * @param informationId 文件id
     * @param userId 用户id
     * @return 返回值
     */
    List<InformationAuthorityVo> getUpPathAuthority(@Param("informationId") String informationId, @Param("userId") String userId);

    /**
     * 向下查看文件有无权限
     * @param informationId 文件id
     * @param userId 用户id
     * @return 返回值
     */
    Integer getDownPathAuthority(@Param("informationId") String informationId, @Param("userId") String userId);

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

    /**
     * 修改用户权限
     * @param userId 用户id
     * @param id 文件id
     * @param limitsOfAuthority 权限管理(0.超级管理员1..管理员 2.可编辑 3.可上传下载 4.可下载 5.仅预览)
     * @return 返回值
     */
    void updateUserAuthority(@Param("userId") String userId, @Param("id") String id , @Param("limitsOfAuthority") Integer limitsOfAuthority);

    /**
     * 查看用户是不是指定文件的成员
     * @param id  空间/文件夹/文件id
     * @param userId 用户id
     * @return 返回值
     */
    String getIdByUserId(@Param("id") String id, @Param("userId") String userId);

    /**
     * 新增用户权限
     * @param userAuthorityId 用户与权限关联的id
     * @param userId 修改人id
     * @param id 文件id
     * @param limitsOfAuthority 权限管理(0.超级管理员1..管理员 2.可编辑 3.可上传下载 4.可下载 5.仅预览)
     * @param toUserId 用户id
     * @return 返回值
     */
    void addUserAuthority(@Param("userAuthorityId") String userAuthorityId, @Param("userId") String userId, @Param("id") String id, @Param("limitsOfAuthority") Integer limitsOfAuthority, @Param("toUserId") String toUserId);

    /**
     * 修改指定的权限
     * @param idByUserId 用户权限关联id
     * @param limitsOfAuthority 权限管理(0.超级管理员1..管理员 2.可编辑 3.可上传下载 4.可下载 5.仅预览)
     */
    void updateById(@Param("idByUserId") String idByUserId, @Param("limitsOfAuthority") Integer limitsOfAuthority, @Param("updateUserId") String updateUserId);


    /**
     * 通过用户与权限关联id删除信息
     * @param id 用户权限关联id
     */
    void deleteById(@Param("id") String id);


    /**
     * 批量新增用户权限信息
     * @param id 空间/文件夹id
     * @param userId 新增人id
     * @param userList 被新增用户的信息
     * @return 返回值
     */
    void addUserAuthorityList(@Param("id") String id, @Param("userId") String userId, @Param("userList") List<InformationAuthorityDto> userList);

    /**
     * 退出空间
     * @param id 空间id
     * @param userId 用户id
     * @return 返回值
     */
    void deleteByUserAndId(@Param("id") String id, @Param("userId") String userId);

    /**
     * 验证用户是不是空间及齐下的成员
     * @param id 空间id
     * @param userId 用户id
     * @return 返回值
     */
    Integer checkSpaceMember(@Param("id") String id, @Param("userId") String userId);

    /**
     * 验证用户是不是空间的成员
     * @param id 空间id
     * @param userId 用户id
     * @return 返回值
     */
    InformationAuthorityVo spaceMember(@Param("id") String id, @Param("userId") String userId);

    void deleteByUsersAndId(@Param("id") String id, @Param("ids") List<String> ids);
}