package com.heyu.api.controller.convert;


import com.heyu.api.baidu.handle.convert.BDocConvertHandle;
import com.heyu.api.baidu.handle.convert.BGetRequestResultHandle;
import com.heyu.api.baidu.request.convert.BGetRequestResultRequest;
import com.heyu.api.baidu.response.convert.BDocConvertResp;
import com.heyu.api.baidu.response.convert.BGetRequestResultResp;
import com.heyu.api.data.annotation.CacheResult;
import com.heyu.api.data.annotation.NotIntercept;
import com.heyu.api.data.utils.ApiR;
import com.heyu.api.data.utils.R;
import com.heyu.api.data.utils.StringUtils;
import com.heyu.api.request.convert.DocConvertReq;
import com.heyu.api.resp.convert.DocConvertRequestResp;
import com.heyu.api.resp.convert.DocConvertResultResp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/***
 * https://console.bce.baidu.com/support/?_=1740667714316&timestamp=1742711719154#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E6%99%BA%E8%83%BD%E6%96%87%E6%A1%A3%E5%88%86%E6%9E%90&api=rest%2F2.0%2Focr%2Fv1%2Fdoc_convert%2Frequest&method=post
 *
 *文档格式转换-提交请求
 *
 *
 * 接口描述
 * 原图文转换器API版产品，现已更名为「文档格式转换」。
 *
 * 可识别图片/PDF文档版面布局，提取文字内容，并转换为保留原文档版式的Word、Excel文档，方便二次编辑和复制，可支持含表格、印章、水印、手写等内容的文档。满足文档格式转换、企业档案电子化等信息管理需求。如需直接使用在线工具，可到智能文档分析平台-文档格式转换使用。在线工具和API版的额度为共享互通。
 *
 * 在线工具「智能文档分析平台-文档格式转换」已支持**「PDF -> 双层PDF/双层OFD」、「OFD -> 双层OFD/Word/Excel」** 转换类型，API版开发中，敬请期待。
 *
 * 文档格式转换API版为异步接口，需要先调用提交请求接口获取 task_id，然后调用获取结果接口进行结果轮询，建议提交请求后 5～10 秒轮询。
 *
 *
 *
 */
@Slf4j
@RestController
@RequestMapping("/convert")
@NotIntercept
public class DocConvertController {


    @Autowired
    private BDocConvertHandle bDocConvertHandle;


    @Autowired
    private BGetRequestResultHandle bGetRequestResultHandle;


    @RequestMapping("/doc")
    @CacheResult
    public R doc(DocConvertReq request) {
        ApiR bR = null;
        if (StringUtils.isBlank(request.getTaskId())) {
            DocConvertResultResp resp = new DocConvertResultResp();
            BGetRequestResultRequest bGetRequestResultRequest = new BGetRequestResultRequest();
            bGetRequestResultRequest.setTaskId(request.getTaskId());
            bR = bGetRequestResultHandle.handle(bGetRequestResultRequest);

            BGetRequestResultResp bGetRequestResultResp = (BGetRequestResultResp) bR.getData();
            BGetRequestResultResp.ResultDTO resultDTO = bGetRequestResultResp.getResult();
            resp.setTaskId(resultDTO.getTaskId());
            resp.setRetCode(resultDTO.getRetCode());
            resp.setRetMsg(resultDTO.getRetMsg());
            resp.setPercent(resultDTO.getPercent());
            resp.setCreateTime(resultDTO.getCreateTime());
            resp.setStartTime(resultDTO.getStartTime());
            resp.setEndTime(resultDTO.getEndTime());
            if (resultDTO.getResultData() != null) {
                resp.setExcel(resultDTO.getResultData().getExcel());
                resp.setWord(resultDTO.getResultData().getWord());
            }
            return R.ok().setData(resp);
        } else {
            DocConvertRequestResp resp = new DocConvertRequestResp();
            bR = bDocConvertHandle.handle(request);
            if (bR.isSuccess()) {
                BDocConvertResp bDocConvertResp = (BDocConvertResp) bR.getData();
                BDocConvertResp.ResultDTO resultDTO = bDocConvertResp.getResult();
                resp.setTaskId(resultDTO.getTaskId());
                return R.ok().setData(resp);
            }
        }
        return R.error(bR.getErrorMsg());
    }


}
