package com.heyu.api.controller.objectdet;


import com.aliyun.objectdet20191230.models.DetectKitchenAnimalsResponse;
import com.aliyun.objectdet20191230.models.DetectKitchenAnimalsResponseBody;
import com.heyu.api.alibaba.handle.objectdet.ADetectKitchenAnimalsHandle;
import com.heyu.api.alibaba.request.objectdet.ADetectKitchenAnimalsRequest;
import com.heyu.api.controller.BaseController;
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.resp.objectdet.DetectKitchenAnimalsResp;
import com.heyu.api.resp.objectdet.ElementsRectangles;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/***
 * https://next.api.aliyun.com/api/objectdet/2019-12-30/DetectKitchenAnimals?tab=DOC&lang=JAVA&RegionId=cn-shanghai
 *
 * 猫鼠识别
 *
 * DetectKitchenAnimals
 *
 * 功能描述
 * 猫鼠识别能力基于视觉 AI 算法、物联网和大数据分析技术，可以检测出场景中是否有猫、老鼠等动物，实现实时预警。
 *应用场景
 * 餐饮后厨或仓库：针对后厨操作间、食材存储仓库等场地，实时检测是否有猫、老鼠等动物，并进行实时预警，提醒工作人员进行相应处理防范。
 *
 * 特色优势
 * 识别准确：基于大量场景样本的基础上，对不同环境、光线、角度、目标状态等进行针对性的训练学习，算法模型识别精度高。
 * 适应性强：算法模型场景适应性强，可直接用于不同空间布局的场景、各类餐厅后厨及用餐前场。
 * 自研算法：通过多端多场景风险发现互通，形成检测、预警、整改、优化全链路闭环，结合数据分析、规则提取实现反哺生产，进而优化模型性能。
 *
 */

@Slf4j
@RestController
@RequestMapping("/object")
@NotIntercept
public class DetectKitchenAnimalsController  extends BaseController {


    @Autowired
    private ADetectKitchenAnimalsHandle aDetectKitchenAnimalsHandle;


    @RequestMapping("/detectKitchen")
    public R detectKitchen(ADetectKitchenAnimalsRequest req) {

        List<DetectKitchenAnimalsResp> respList = new ArrayList<>();

        ApiR<DetectKitchenAnimalsResponse> aR = aDetectKitchenAnimalsHandle.handle(req);


        if(aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())){

            DetectKitchenAnimalsResponseBody.DetectKitchenAnimalsResponseBodyData responseBodyData = aR.getData().getBody().getData();
            if(CollectionUtils.isNotEmpty(responseBodyData.getElements())){
                for (DetectKitchenAnimalsResponseBody.DetectKitchenAnimalsResponseBodyDataElements element : responseBodyData.getElements()) {
                    DetectKitchenAnimalsResp resp = new DetectKitchenAnimalsResp();
                    resp.setType(element.getType());
                    resp.setScore(element.getScore());
                    ElementsRectangles elementsRectangles = new ElementsRectangles();
                    DetectKitchenAnimalsResponseBody.DetectKitchenAnimalsResponseBodyDataElementsRectangles rectangles = element.getRectangles();
                    elementsRectangles.setLeft(rectangles.getLeft());
                    elementsRectangles.setTop(rectangles.getTop());
                    elementsRectangles.setWidth(rectangles.getWidth());
                    elementsRectangles.setHeight(rectangles.getHeight());
                    resp.setRectangles(elementsRectangles);
                }
                return R.ok().setData(respList);
            }
        }
        return R.error();
    }
}
