package com.heyu.api.controller.objectdet;


import com.aliyun.objectdet20191230.models.DetectWhiteBaseImageResponse;
import com.aliyun.objectdet20191230.models.DetectWhiteBaseImageResponseBody;
import com.heyu.api.alibaba.handle.objectdet.ADetectWhiteBaseImageHandle;
import com.heyu.api.alibaba.request.objectdet.ADetectWhiteBaseImageRequest;
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.DetectWhiteBaseImageReq;
import com.heyu.api.resp.objectdet.DetectWhiteBaseImageResp;
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.ArrayList;
import java.util.List;

/**
 * 白底图检测控制器
 * <p>
 * 基于阿里云物体检测 API，检测输入的图片是否为白底图（背景为白色的图片）。
 * 支持通过图片 URL 或 Base64 编码两种方式传入图片。
 * </p>
 * <p>
 * 白底图通常用于证件照、商品图、资质文件等场景，本接口可自动识别图片背景是否符合白底要求。
 * </p>
 * <p>
 * 阿里云 API 文档：<a href="https://next.api.aliyun.com/api/objectdet/2019-12-30/DetectWhiteBaseImage?tab=DOC">DetectWhiteBaseImage</a>
 * </p>
 * <p>
 * 适用场景：
 * <ul>
 *   <li>证件照审核：检测证件照背景是否符合白底要求</li>
 *   <li>商品图处理：判断商品图片是否为白底，便于后续处理</li>
 *   <li>资质文件验证：自动审核资质文件图片背景</li>
 * </ul>
 * </p>
 * <p>
 * 接口路径：/object/detectWhiteBase
 * </p>
 *
 * @author heyu
 * @since 1.0.0
 */
@Slf4j
@RestController
@RequestMapping("/object")
@NotIntercept
public class DetectWhiteBaseImageController extends BaseController {


    @Autowired
    private ADetectWhiteBaseImageHandle aDetectWhiteBaseImageHandle;

    /**
     * 白底图检测接口
     * <p>
     * 接收图片（URL 或 Base64），调用阿里云白底图检测 API，返回检测结果。
     * </p>
     *
     * @param req 检测请求参数，包含 imageUrl 或 imageBase64（二选一）
     * @return 白底图检测结果列表，每个元素包含 whiteBase 字段表示是否为白底图；若失败返回错误信息
     */
    @RequestMapping("/detectWhiteBase")
    public R ipc(DetectWhiteBaseImageReq req) {

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

        ADetectWhiteBaseImageRequest aDetectWhiteBaseImageRequest = new ADetectWhiteBaseImageRequest();
        aDetectWhiteBaseImageRequest.setImageBase64(req.getImageBase64());
        aDetectWhiteBaseImageRequest.setImageUrl(req.getImageUrl());

        ApiR<DetectWhiteBaseImageResponse> aR = aDetectWhiteBaseImageHandle.handle(aDetectWhiteBaseImageRequest);
        if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
            DetectWhiteBaseImageResponseBody.DetectWhiteBaseImageResponseBodyData responseBodyData = aR.getData().getBody().getData();
            for (DetectWhiteBaseImageResponseBody.DetectWhiteBaseImageResponseBodyDataElements element : responseBodyData.getElements()) {

                DetectWhiteBaseImageResp resp = new DetectWhiteBaseImageResp();
                resp.setWhiteBase(element.getWhiteBase());
                respList.add(resp);
            }
            return R.ok().setData(respList);
        }
        return R.error(aR.getErrorMsg());
    }

}
