package com.vctgo.file.service;

import com.vctgo.common.core.domain.R;
import com.vctgo.file.domain.FileReUserOperate;
import com.vctgo.file.domain.dto.FileInfoAuthDto;
import com.vctgo.system.api.domain.FileInfo;
import com.vctgo.system.api.domain.dto.FileInfoDto;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 文件上传接口
 *
 * @author vctgo
 */
public interface IFileInfoService {
    /**
     * 文件Ids
     * @param ids
     * @return
     */
    List<FileInfo> selectByIds(String ids);
    /**
     * 文件Id
     * @param id
     * @return
     */
    FileInfo selectById(Long id);
    /**
     * 通过租户Id和服务名创建默认文件夹
     * @param tenantId
     * @param serviceName
     * @return
     */
    void initMkdirByTenantId(Long tenantId,String serviceName, String fileName);
    /**
     * 分页
     *
     * @param fileInfo
     * @return
     */
    FileInfoAuthDto findFileManagePage(FileInfo fileInfo);

    /**
     * 富力桃园定制化文件资源-分页
     *
     * @param fileInfo
     * @return
     */
    FileInfoAuthDto findFileManagePageV2(FileInfo fileInfo);

    /**
     * 带着玩具Id 文件上传请求
     */
    R<FileInfo> uploadByUploadTag(String uploadTag, MultipartFile file);

    /**
     * 添加文件
     *
     * @param fileInfo 文件信息对象
     * @throws Exception
     */
    int addFile(FileInfo fileInfo);

    /**
     * 上传文件
     *
     * @param file
     * @return
     */
    R<FileInfoDto> upload(MultipartFile file);

    /**
     * fastdfs下载文件
     *
     * @param filePath 文件路径
     * @return
     */
    void fastdfsDownLoad(String filePath);

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

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

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

    /**
     * 通过serviceId获取关联的图片id
     *
     * @param ids
     * @return
     */
    List<FileInfo> selectUrlByIds(String ids);

    /**
     * 通过文件id的集合获取文件集信息
     *
     * @param tenantId
     * @param ids
     * @return
     */
    List<FileInfo> selectPointTenantUrlByIds(Long tenantId, String ids);

    /**
     * 文件、文件夹重命名
     */
    void doReFileName(Long id, String rename);

    /**
     * 通过文件id的集合获取文件集信息
     */
    void doBatchHideFile(String ids);

    /**
     * 移动文件夹树
     */
    List<FileInfo> doMoveFileTree();

    /**
     * 通过文件id的集合获取文件集信息
     */
    void doBatchMoveFile(String fileParentId,String ids);

    /**
     * 通过文件id的集合获取文件集信息
     */
    void doBatchUserFileAuth(String fileId,List<FileReUserOperate> fileReUserOperateList);

    /**
     * @param fileInfo
     * @return
     */
    List<FileInfo> selectListByFileInfo(FileInfo fileInfo);

    /**
     * 通过文件Id逻辑删除文件、文件夹
     * @param fileIds 文件、文件夹ID集合
     * @return
     */
    void logicalDeleteByFileIds(String fileIds);

}
