package com.heyu.api.controller.imageenhan;


import com.aliyun.imageenhan20190930.models.ErasePersonResponse;
import com.aliyun.imageenhan20190930.models.ErasePersonResponseBody;
import com.heyu.api.alibaba.handle.imageenhan.AErasePersonHandle;
import com.heyu.api.alibaba.request.imageenhan.AErasePersonRequest;
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.imageenhan.ErasePersonReq;
import com.heyu.api.resp.imageenhan.ErasePersonResp;
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/imageenhan/2019-09-30/ErasePerson?tab=DOC&lang=JAVA&RegionId=cn-shanghai
 * 擦除
 * <p>
 * 图像人体擦除
 * <p>
 * ErasePerson
 *
 * 应用场景
 * 旅行照片修复：图像人体擦除可以帮您去除背景中的路人，还您美美的旅行照片。
 * 穿帮镜头后期修复：在影视拍摄过程中，如果在前期拍摄镜头中出现了本不应该出现的人物，可以通过图像人体擦除帮您批量处理修复这些穿帮镜头。
 * 特点优势
 * 尽量保留原照片内容：通过指定区域 Mask，缩小自动填充背景范围，擦除背景人物，降低处理后照片的违和感。人像区域 mask，建议使用阿里云视觉智能开放平台提供的人体分割算法来获得，可以得到更好的效果。
 * 自动生成填充被人体遮挡的背景：基于深度学习算法，图像人体擦除可以推理还原出被人体遮挡的背景内容，真实而没有违和感。
 */
@Slf4j
@RestController
@RequestMapping("/image")
@NotIntercept
public class ErasePersonController extends BaseController {

    @Autowired
    private AErasePersonHandle aErasePersonHandle;


    @RequestMapping("/erasePerson")
    @CacheResult
    public R erasePerson(ErasePersonReq req) {
        ErasePersonResp resp = new ErasePersonResp();

        AErasePersonRequest aErasePersonRequest = new AErasePersonRequest();
        aErasePersonRequest.setMaskUrl(req.getMaskUrl());
        aErasePersonRequest.setImageUrl(req.getImageUrl());
        aErasePersonRequest.setMaskBase64(req.getMaskBase64());
        aErasePersonRequest.setImageBase64(req.getImageBase64());


        ApiR<ErasePersonResponse> aR = aErasePersonHandle.handle(aErasePersonRequest);
        if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
            ErasePersonResponseBody.ErasePersonResponseBodyData responseBodyData = aR.getData().getBody().getData();

            resp.setImageURL(responseBodyData.getImageUrl());
            return R.ok().setData(resp);
        }

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


}
