package com.vctgo.file.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vctgo.common.mybatisplus.mapper.BaseMapperX;
import com.vctgo.system.api.domain.FileInfo;
import com.vctgo.system.api.domain.dto.FileInfoAncestorsDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 玩具文件Mapper接口
 *
 * @author caesar
 * @date 2023-04-25
 */
@Repository
public interface FileInfoMapper extends BaseMapperX<FileInfo> {

    List<FileInfo> selectOperateFileList(@Param("tenantId") Long tenantId,@Param("userId") String userId);

    List<FileInfo> selectListByAncestors(@Param("fileIdList") List<String> fileIdList);

    /**
     * 根据fileParentId获取文件、文件夹集合列表
     * @return 文件、文件夹集合
     */
    List<FileInfo> selectListByParentId(@Param("fileParentId") Long fileParentId);

    /**
     * 根据fileParentId获取文件、文件夹集合列表
     * @return 文件、文件夹集合
     */
    List<FileInfo> selectAllListByParentId(@Param("fileParentId") Long fileParentId);

    /**
     * 查询文件信息列表-分页
     *
     * @param fileInfo 文件信息
     * @return 文件信息集合
     */
    Page<FileInfo> selectFileInfoList(Page page, @Param("query") FileInfo fileInfo);

    /**
     * 查询文件信息列表-分页
     *
     * @param fileInfo 文件信息
     * @return 文件信息集合
     */
    Page<FileInfo> selectFileManagePage(Page page, @Param("query") FileInfo fileInfo);

    /**
     * 查询玩具文件列表
     *
     * @param fileInfo 玩具文件
     * @return 玩具文件集合
     */
    List<FileInfo> selectFileInfoList(@Param("query") FileInfo fileInfo);

    /**
     * 更新文件状态信息
     *
     * @param serviceName 业务名称
     * @param status      状态 0/1
     * @param serviceId   服务对应的记录Id
     * @return
     */
    int updateFileStatusByServiceIdAndServiceName(@Param("serviceName") String serviceName,
                                                  @Param("status") String status,
                                                  @Param("serviceId") String serviceId);

    /**
     * 更新文件服务Id信息
     *
     * @param serviceName 业务名称
     * @param serviceId   业务Id
     * @param ids         记录文件的id数组
     * @return
     */
    int updateFileServiceIdAndServiceNameByIds(@Param("serviceName") String serviceName,
                                               @Param("serviceId") String serviceId,
                                               @Param("ids") String ids);

    /**
     * 通过服务Id更新文件状态信息
     *
     * @param serviceName 业务名称
     * @param serviceId   业务Id
     * @param status      状态 0/1
     * @param ids         记录文件的id数组
     * @return
     */
    int updateFileServiceIdAndServiceNameAndStatusByIds(@Param("serviceName") String serviceName,
                                                        @Param("serviceId") String serviceId,
                                                        @Param("status") String status,
                                                        @Param("ids") String ids);

    /**
     * 批量删除玩具文件
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteFileInfoByIds(Long[] ids);

    /**
     * 批量删除玩具文件
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    List<FileInfo> selectPointTenantUrlByIds(@Param("tenantId") Long tenantId,
                                             @Param("ids") String[] ids);

    /**
     * 移动玩具到另外一个文件夹
     *
     * @param ids
     * @param userId
     * @return
     */
    int hideFileByIds(@Param("ids") String ids, @Param("userId") Long userId);

    /**
     * 批量恢复数据
     *
     * @param ids
     * @param userId
     * @return
     */
    int recoverFileByIds(@Param("ids") String ids, @Param("userId") Long userId);

    /**
     * 逻辑删除文件信息
     *
     * @param ids
     * @param userId
     * @return
     */
    int deleteFileByIds(@Param("ids") String ids, @Param("userId") Long userId);

    /**
     * 移动玩具到另外一个文件夹
     *
     * @param ids
     * @param toParentId
     * @return
     */
    int moveFileByIds(@Param("ids") String ids,
                      @Param("toParentId") String toParentId,
                      @Param("ancestors") String ancestors,
                      @Param("userId") Long userId);


    int updateFileInfo(@Param("fileId") String fileId, @Param("fileName") String fileName, @Param("userId") Long userId);

    List<FileInfoAncestorsDto> selectAncestorsListById(@Param("ancestors") String ancestors);

}
