package com.heyu.api.controller.imageseg;


import com.aliyun.imageseg20191230.models.SegmentHDBodyResponse;
import com.aliyun.imageseg20191230.models.SegmentHDBodyResponseBody;
import com.heyu.api.alibaba.handle.imageseg.ASegmentHDBodyHandle;
import com.heyu.api.alibaba.request.imageseg.ASegmentHDBodyRequest;
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.R;
import com.heyu.api.request.imagerecog.SegmentHDBodyReq;
import com.heyu.api.resp.imageseg.SegmentHDBodyResp;
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://next.api.aliyun.com/api/imageseg/2019-12-30/SegmentHDBody?tab=DEMO&lang=JAVA
 * <p>
 * <p>
 * 高清人体分割 SegmentHDBody
 * <p>
 * 功能描述
 * 高清人体分割能力可以自动识别图中人体轮廓，实现与背景进行分离，返回分割后的前景人像图。本功能适用于真人图片，不适用于卡通图片。 关于该接口功能的示例图如下：
 * <p>
 * <p>
 * 应用场景
 * 人像摄影：人体分割通过将摄影主体人物从背景中分割出来，将背景虚化，以达到大光圈浅景深效果，突出人物主体。
 * 证件照制作：上传或拍摄一张人像照片，可将人物精细地分割出来，再搭配其他背景处理能力，最终制作出标准的证件照。
 */
@Slf4j
@RestController
@RequestMapping("/body")
@NotIntercept
public class SegmentHDBodyController extends BaseController {


    @Autowired
    private ASegmentHDBodyHandle segmentHDBodyHandle;


    @RequestMapping("/hd/segment")
    @CacheResult
    public R segment(SegmentHDBodyReq request) {
        SegmentHDBodyResp resp = new SegmentHDBodyResp();

        ASegmentHDBodyRequest aSegmentHairRequest = new ASegmentHDBodyRequest();

        aSegmentHairRequest.setImageBase64(request.getImageBase64());
        aSegmentHairRequest.setImageUrl(request.getImageUrl());


        ApiR<SegmentHDBodyResponse> aR = segmentHDBodyHandle.handle(aSegmentHairRequest);
        if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
            SegmentHDBodyResponseBody.SegmentHDBodyResponseBodyData responseBodyData = aR.getData().getBody().getData();
            resp.setImageURL(responseBodyData.getImageURL());
            return R.ok().setData(resp);
        }
        return R.error();
    }
}
