package com.heyu.api.controller.objectdet;


import com.aliyun.objectdet20191230.models.DetectMainBodyResponse;
import com.aliyun.objectdet20191230.models.DetectMainBodyResponseBody;
import com.heyu.api.alibaba.handle.objectdet.ADetectMainBodyHandle;
import com.heyu.api.alibaba.request.objectdet.ADetectMainBodyRequest;
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.request.objectdet.DetectMainBodyReq;
import com.heyu.api.resp.imageseg.DetectMainBodyResp;
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;

/**
 * 主体检测控制器
 * <p>
 * 基于阿里云物体检测 API，对输入的图片进行主体检测，返回图片中主要主体（如人、物等）的位置信息。
 * 支持通过图片 URL 或 Base64 编码两种方式传入图片。
 * </p>
 * <p>
 * 阿里云 API 文档：<a href="https://next.api.aliyun.com/api/objectdet/2019-12-30/DetectMainBody?tab=DEMO&lang=JAVA">DetectMainBody</a>
 * </p>
 * <p>
 * 适用场景：
 * <ul>
 *   <li>智能裁图：自动识别图片主体，保留主体区域进行裁剪</li>
 *   <li>商品展示：突出商品主体，优化展示效果</li>
 *   <li>内容审核：定位图片中的关键内容区域</li>
 * </ul>
 * </p>
 * <p>
 * 接口路径：/main/body/detect
 * </p>
 *
 * @author heyu
 * @since 1.0.0
 */
@Slf4j
@RestController
@RequestMapping("/main/body")
@NotIntercept
public class DetectMainBodyController extends BaseController {


    @Autowired
    private ADetectMainBodyHandle aDetectMainBodyHandle;


    /**
     * 主体检测接口
     * <p>
     * 接收图片（URL 或 Base64），调用阿里云主体检测 API，返回图片中主要主体的位置坐标。
     * </p>
     *
     * @param req 检测请求参数，包含 imageUrl 或 imageBase64（二选一）
     * @return 主体位置信息，包含 x, y, width, height 坐标；若失败返回错误信息
     */
    @RequestMapping("/detect")
    public R ipc(DetectMainBodyReq req) {


        DetectMainBodyResp detectMainBodyResp = new DetectMainBodyResp();
        ADetectMainBodyRequest aDetectMainBodyRequest = new ADetectMainBodyRequest();
        aDetectMainBodyRequest.setImageBase64(req.getImageBase64());
        aDetectMainBodyRequest.setImageUrl(req.getImageUrl());

        ApiR<DetectMainBodyResponse> aR = aDetectMainBodyHandle.handle(aDetectMainBodyRequest);

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

            DetectMainBodyResponseBody.DetectMainBodyResponseBodyData responseBodyData = aR.getData().getBody().getData();
            DetectMainBodyResponseBody.DetectMainBodyResponseBodyDataLocation responseBodyDataLocation = responseBodyData.getLocation();

            detectMainBodyResp.setX(responseBodyDataLocation.getX());
            detectMainBodyResp.setY(responseBodyDataLocation.getY());
            detectMainBodyResp.setWidth(responseBodyDataLocation.getWidth());
            detectMainBodyResp.setHeight(responseBodyDataLocation.getHeight());
            return R.ok().setData(detectMainBodyResp);

        }

        return R.error(aR.getErrorMsg());
    }


}
