//package com.backendsys.service.Ai.Aizn;
//
//import cn.hutool.core.convert.Convert;
//import cn.hutool.core.util.StrUtil;
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.backendsys.entity.Ai.Aizn.AiznImageTaskVO;
//import com.backendsys.entity.Tencent.TencentCos.UploadOriginDTO;
//import com.backendsys.entity.Tencent.TencentCos.UploadOriginResp;
//import com.backendsys.exception.CustException;
//import com.backendsys.mapper.Ai.Aizn.AiznImageTaskMapper;
//import com.backendsys.service.SDKService.SDKTencent.SDKTencentCOSService;
//import com.backendsys.utils.MapUtil;
//import com.backendsys.utils.response.PageInfoResult;
//import com.fzzixun.openapi.sdk.client.OpenClient;
//import com.fzzixun.openapi.sdk.common.RequestMethod;
//import com.fzzixun.openapi.sdk.request.CommonRequest;
//import com.fzzixun.openapi.sdk.response.CommonResponse;
//import com.github.pagehelper.PageHelper;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.io.IOException;
//import java.util.*;
//
//@Service
//public class AiznImageTaskServiceImpl implements AiznImageTaskService {
//
//    @Autowired
//    private AiznService aiznService;
//
//    @Autowired
//    private SDKTencentCOSService sdkTencentCOSService;
//
//    @Autowired
//    private AiznImageTaskMapper aiznImageTaskMapper;
//
//
//    /**
//     * [紫鸟] 查询进度 (查询任务 -> 储存桶)
//     * - 判断任务是否存在
//     *   - 是：
//     *     - 如果 status = 3，则返回数据库数据
//     *     - 如果 status != 3，读取远程数据并更新数据库，并将结果图片上传储存桶
//     */
//    @Override
//    public Map<String, Object> getProgressOfTask(String id, Integer progress_type) throws IOException {
//
//        // -- 查询详情 -----------------------------------------------------------------------
//        AiznImageTaskVO aiznImageTaskVO = new AiznImageTaskVO();
//        aiznImageTaskVO.setTask_id(id);
//        Map<String, Object> detail = aiznImageTaskMapper.queryAiznImageTaskDetail(aiznImageTaskVO);
//        if (detail == null) throw new CustException("任务ID不存在");
//
//        // -- 如果已有结果 (status = 3)，则不必再查询/上传储存桶，仅返回原始数据 {task_result_json} --
//        if ((Integer) detail.get("status") != 3) {
//
//            // -- 业务参数 -------------------------------------------------------------------
//            JSONObject object = new JSONObject();
//            object.set("id", id);
//
//            // -- 实现方法 -------------------------------------------------------------------
//            OpenClient client = aiznService.getOpenClient();
//            CommonRequest request = new CommonRequest("/linkfox-ai/image/v1/make/info/" + progress_type, RequestMethod.POST_JSON);
//            request.setBizContent(object.toString());
//
//            // -- 返回结果 -------------------------------------------------------------------
//            CommonResponse response = client.executeAppToken(request, aiznService.getAppToken());
//            JSONObject resp = aiznService.checkResponse(response);
//            if ((Integer) resp.get("code") == 200) {
//
//                // -- 成功 ------------------------------------------------------------------
////                Map<String, Object> respData = (Map<String, Object>) resp.get("data");
//                Map<String, Object> respData = Convert.toMap(String.class, Object.class, resp.get("data"));
//                Map<String, Object> respDataToCase = MapUtil.convertToUnderscoreCase(respData);
//                System.out.println(respData);
//
//                // -- 将任务结果更新到数据表 -----------------------------------------------------
//                AiznImageTaskVO vo = new AiznImageTaskVO();
//                vo.setTask_id((String) respData.get("id"));
//
//                Integer status = (Integer) respData.get("status");
//                vo.setStatus(status);
//
//                // -- 如果 status = 3 (SUCCESS) ---------------------------------------------
//                if (status == 3) {
//                    // 获取任务结果
//                    List<Map<String, Object>> resultList = (List<Map<String, Object>>) respData.get("resultList");
//                    List<Map<String, Object>> resultListToCase = (List<Map<String, Object>>) respDataToCase.get("result_list");
//
//                    // 转存 (result_image_url 字段保存转存后的链接，多张以逗号间隔)
//                    List<String> resultImages = new ArrayList<>();
//
//                    for (int i = 0; i < resultList.size(); i++) {
//                        Map<String, Object> result = resultList.get(i);
//                        String resultUrl = (String) result.get("url");
//                        // -- 将获得的结果图片，异步上传到对象储存桶 -----------------------------------
//                        UploadOriginDTO uploadOriginDTO = new UploadOriginDTO();
//                        uploadOriginDTO.setDir("temp");
//                        uploadOriginDTO.setUrl(resultUrl);
//                        UploadOriginResp uploadOriginResp = sdkTencentCOSService.uploadOrigin(uploadOriginDTO);
//
//                        // 将上传后的远程地址附加到返回值中
//                        resultListToCase.get(i).put("url_remote", uploadOriginResp.getUrl());
//                        resultListToCase.get(i).put("url_remote_thumb", uploadOriginResp.getUrl_thumb());
//
//                        resultImages.add(uploadOriginResp.getUrl());
//                    }
//
//                    respDataToCase.put("result_list", resultListToCase);
//
//                    System.out.println("resultImages:");
//                    System.out.println(resultImages);
//
//                    vo.setResult_image_url(String.join(",", resultImages));
//                    vo.setTask_result_json(JSONUtil.toJsonStr(respDataToCase));
//
//                }
//                aiznImageTaskMapper.updateAiznImageTask(vo);
//                // --------------------------------------------------------------------------
//
//                // 从远程接口返回查询任务详情
//                return respDataToCase;
//
//            } else {
//                System.out.println(resp);
//                throw new CustException((String) resp.get("msg"));
//            }
//
//        } else {
//            // 从数据库返回查询任务详情
//            return JSONUtil.parseObj(detail.get("task_result_json"));
//        }
//    }
//
//    @Override
//    public List<Map<String, Object>> getProgressOfTaskArray(String ids, Integer progress_type) throws IOException {
//        List<String> idsArray = StrUtil.split(ids, ',');
//
//        if (idsArray.size() == 0 || idsArray.size() > 10) {
//            throw new CustException("批量查询范围是: 1~10 条");
//        }
//
//        String[] integerIdsArray = Convert.toStrArray(idsArray);
//        List<Map<String, Object>> respGroup = new ArrayList<>();
//        for (String id : integerIdsArray) {
//            Map<String, Object> resp = getProgressOfTask(StrUtil.trim(id), progress_type);
//            respGroup.add(resp);
//        }
//        return respGroup;
//    }
//
//
//    /**
//     * 列表
//     */
//    @Override
//    public Map<String, Object> getImageTaskList(Integer pageNum, Integer pageSize, AiznImageTaskVO aiznImageTaskVO) {
//
//        // 分页查询
//        if (pageNum != null && pageSize != null) {
//            PageHelper.startPage(pageNum, pageSize);
//            PageHelper.getLocalPage().setPageSizeZero(true);
//        }
//
//        // 分页输出 (自定义)
//        List<Map<String, Object>> list = aiznImageTaskMapper.queryAiznImageTask(aiznImageTaskVO);
//
//        // 类型转换 数组 (result_image_url)
//        for (Map<String, Object> item : list) {
//            String imgUrls = (String) item.get("result_image_url");
//            item.put("result_image_url", StrUtil.isEmpty(imgUrls) ? new String[0] : StrUtil.splitToArray((String) imgUrls, ','));
//        }
//
//        PageInfoResult pageInfoResult = new PageInfoResult(list);
//        return pageInfoResult.toMap();
//    }
//
//    /**
//     * 详情
//     */
//    @Override
//    public Map<String, Object> getImageTaskDetail(AiznImageTaskVO aiznImageTaskVO) {
//        Map<String, Object> resp = aiznImageTaskMapper.queryAiznImageTaskDetail(aiznImageTaskVO);
//        if (resp == null) throw new CustException("任务ID不存在");
//
//        // result_image_url 转 数组类型
//        String imgUrls = (String) resp.get("result_image_url");
//        resp.put("result_image_url", StrUtil.isEmpty(imgUrls) ? new String[0] : StrUtil.splitToArray((String) imgUrls, ','));
//
//        return resp;
//    }
//}
