package com.heyu.api.controller.financial;


import com.alibaba.fastjson.JSONObject;
import com.heyu.api.baidu.handle.financial.BMultipleInvoiceHandle;
import com.heyu.api.baidu.request.financial.BMultipleInvoiceRequest;
import com.heyu.api.controller.BaseController;
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.MapUtils;
import com.heyu.api.data.utils.R;
import com.heyu.api.resp.financial.MultipleInvoiceResp;
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;

import java.util.Map;


/***
 * https://console.bce.baidu.com/support/?_=1740494347073&timestamp=1742743299843#/api?product=AI&project=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB&parent=%E8%B4%A2%E5%8A%A1%E7%A5%A8%E6%8D%AEOCR&api=rest%2F2.0%2Focr%2Fv1%2Fmultiple_invoice&method=post
 *
 *智能财务票据识别
 *
 *
 *
 接口描述
 支持财务场景中13种常见票据的分类及结构化识别，包括增值税发票、卷票、机打发票、定额发票、火车票、出租车票、网约车行程单、飞机行程单、汽车票、过路过桥费、船票、
 机动车/二手车销售发票。支持多张不同种类票据在同一张图片上的混贴场景，可返回每张票据的位置、种类及票面信息的结构化识别结果。

 视频教程请参见 智能财务票据识别+增值税发票验真使用教程
 *
 */
@Slf4j
@RestController
@RequestMapping("/multiple/invoice")
@NotIntercept
public class MultipleInvoiceController extends BaseController {


    @Autowired
    private BMultipleInvoiceHandle bMultipleInvoiceHandle;


    @RequestMapping("/recognize")
    @CacheResult
    public R recognize(BMultipleInvoiceRequest req) {
        MultipleInvoiceResp resp = new MultipleInvoiceResp();

        ApiR<Map> bR = bMultipleInvoiceHandle.handle(req);
        if (bR.isSuccess()) {
            Map<String, Object> data = bR.getData();
            resp.setProbability(MapUtils.getByExpr(data, "words_result.probability"));
            resp.setType(MapUtils.getByExpr(data, "words_result.type"));
            String result = MapUtils.getByExpr(data, "words_result.result");
            Map map = JSONObject.parseObject(result, Map.class);
            // 后期这个map 可以写成不同的对象，这里需要找到17种发票之后再来写
            resp.setResult(map);
            return R.ok().setData(resp);
        }

        return R.error();
    }


}
