package digital.laboratory.platform.inspection.service;

import com.deepoove.poi.XWPFTemplate;
import digital.laboratory.platform.sys.entity.Area;
import digital.laboratory.platform.sys.entity.SysOrg;
import digital.laboratory.platform.sys.entity.SysUser;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.util.List;
import java.util.Map;

/**
 * 通用的feign请求封装接口服务层接口
 */
public interface CommonFeignService {

    /**
     * 远程调用获取用户机构
     * @param orgId
     * @return
     */
    SysOrg remoteGetSysOrg(String orgId);

    /**
     * 根据权限和机构远程获取用户列表
     *
     * @param orgId    组织ID
     * @param permission 权限列表
     * @return 用户列表
     */
    List<SysUser> remoteGetUsersByPermission(String orgId, List<String> permission);

    /**
     * 通过机构ID远程获取机构所在省市信息
     *
     * @param orgId 机构ID
     * @return 包含机构所在省市信息的Area对象列表
     * @throws RuntimeException 当根据机构ID获取机构所在省市信息失败时抛出
     */
    List<Area> remoteGetProvinceCityInfo(String orgId);

    /**
     * 远程调用获取用户信息
     * @param username
     * @return
     */
    SysUser remoteGetUserByUsername(String username);

    /**
     * 远程调用获取用户信息
     * @param userId
     * @return
     */
    SysUser remoteGetUserById(String userId);

    /**
     * 远程调用生成word,并转成pdf
     *
     * @param template
     * @param originalFilename 文件名
     * @param savePath         保存到minio路径
     * @return
     * @throws Exception
     */
    boolean remoteGenerateWord2PDF(XWPFTemplate template, String originalFilename, String savePath) throws Exception;

    /**
     * 远程调用根据文件路径获取文件
     * @param filePath minio上的文件路径
     * @return
     * @throws Exception
     */
    ByteArrayInputStream remoteGetFile(String filePath) throws Exception;

    /**
     * 远程调用根据文件路径获取文件
     * @param filePath minio上的文件路径
     * @param fileName 名称
     * @param httpServletResponse
     * @throws Exception
     */
    void remoteGetFile(String filePath, String fileName, HttpServletResponse httpServletResponse) throws Exception;

    /**
     * 远程调用根据文件路径获取文件列表
     * @param filePath minio上的文件路径
     */
    List<String> remoteGetFileList(String filePath);

    /**
     * 远程调用-上传文件
     * @param file 上传的文件对象
     * @param path 上传到minio的位置
     * @return
     */
    Map<String, String> remoteUploadFile(MultipartFile file, String path);
}
