package com.ruoyi.system.service.webOfficeImpl;


import cn.ljserver.tool.weboffice.v3.exception.FileNotExist;
import cn.ljserver.tool.weboffice.v3.model.DownloadInfo;
import cn.ljserver.tool.weboffice.v3.model.FileInfo;
import cn.ljserver.tool.weboffice.v3.model.UserPermission;
import cn.ljserver.tool.weboffice.v3.service.PreviewService;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.loan.LoanApplicationFj;
import com.ruoyi.system.service.webService.WebofficeFjServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collection;
import java.util.Comparator;
import java.util.Optional;

/**
 * 文件预览服务必要的接口实现
 * <br>
 * <a href="https://solution.wps.cn/docs/callback/preview.html">-详见官方文档-</a>
 */
@Service
public class PreviewServiceImpl implements PreviewService {

    @Autowired
    private WebofficeFjServiceImpl webofficeFjServiceImpl;

    @Autowired
    private RedisCache redisCache;

    /**
     * 获取文件信息
     *
     * @param fileId 文件id <br>
     *               <a href="https://solution.wps.cn/docs/callback/preview.html#获取文件信息">-详见官方文档-</a>
     */
    @Override
    public FileInfo fetchFileInfo(String fileId) {
        // 解释说明下，这里在实际的设计中，需要将 文件信息 表 和历史文件版本表分开放
        // 这里是通过文件id，获取到当前文件最新一个版本的文件信息，并返回
        // 这里为了方便，所以设计成了一张表
        FileInfo fileInfo = webofficeFjServiceImpl.fetchFile(fileId).toFileInfo();
        return fileInfo;
    }

    /**
     * 获取文件下载地址
     *
     * @param fileId 文件id <br>
     *               <a href="https://solution.wps.cn/docs/callback/preview.html#获取文件下载地址">-详见官方文档-</a>
     */
    @Override
    public DownloadInfo fetchDownloadInfo(String fileId) {
        // 解释说明下，这里在实际的设计中，需要将 文件信息 表 和历史文件版本表分开放
        // 然后这里就会获取最后一个版本的文件并返回
        // 这里为了方便，所以设计成了一张表
        LoanApplicationFj cacheObject = redisCache.getCacheObject(fileId + "info");
        String url = "https://rzdb.qs163.cn/prod-api/"+cacheObject.getUrl();
        DownloadInfo downloadInfo = new DownloadInfo();
        downloadInfo.setUrl(url);
        return downloadInfo;
    }

    /**
     * 获取用户文件权限
     *
     * @param fileId 文件id <br>
     *               <a href="https://solution.wps.cn/docs/callback/preview.html#文档用户权限">-详见官方文档-</a>
     */
    @Override
    public UserPermission fetchUserPermission(String fileId) {
        // 解释说明下，这里在实际的设计中，需要将 文件信息 表 和 用户权限 表 分开放
        // 这里为了方便，并没有设计表，返回了所有权限到前端
        // check file exists
        webofficeFjServiceImpl.fetchFile(fileId);
        // 获取user信息，这个方法点进去看看把！！！
        SysUser user = SecurityUtils.getLoginUser().getUser();
        // 构建user对应的文件权限
        return UserPermission.builder()
                .userId(String.valueOf(user.getUserId()))
                .read(true)
                .update(true)
                .rename(true)
                .download(true)
                .copy(true)
                .comment(true)
                .history(true)
                .build();
    }
}
