package com.heyu.api.controller.face;


import com.aliyun.facebody20191230.models.RetouchSkinResponse;
import com.aliyun.facebody20191230.models.RetouchSkinResponseBody;
import com.heyu.api.alibaba.handle.facebody.ARetouchSkinHandle;
import com.heyu.api.alibaba.request.facebody.ARetouchSkinRequest;
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.face.RetouchSkinReq;
import com.heyu.api.resp.face.RetouchSkinResp;
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/facebody/2019-12-30/RetouchSkin?tab=DOC&lang=JAVA&RegionId=cn-shanghai
 *
 * 智能美肤
 *
 * RetouchSkin
 *
 *
 * 功能描述
 * 智能美肤功能可实现输入一张人物图像，自动对脸部以及全身皮肤进行美肤，同时尽可能的保留皮肤质感。功能支持情况如下：
 *
 * 脸部美肤：脸部区域匀肤、去瑕疵，比如：痘、痘印、雀斑等。
 * 全身皮肤：全身皮肤区域美白。
 * 多人照片：支持不超过 10 人的多人图片处理。
 *
 * 应用场景
 * 专业修图：可用于影楼、电商、图片直播等专业摄影场景，利用智能美肤算法快速进行美肤修图，提高工作效率。
 * 美颜拍摄：用于娱乐、生活等场景，提高人物美观度。
 *
 */
@Slf4j
@RestController
@RequestMapping("/face")
@NotIntercept
public class RetouchSkinController extends BaseController {


    @Autowired
    private ARetouchSkinHandle aRetouchSkinHandle;


    @RequestMapping("/skin")
    @CacheResult
    public R skin(RetouchSkinReq req) {

        RetouchSkinResp resp = new RetouchSkinResp();

        ARetouchSkinRequest request = new ARetouchSkinRequest();
        request.setImageBase64(req.getImageBase64());
        request.setImageUrl(req.getImageUrl());
        request.setRetouchDegree(req.getRetouchDegree());
        request.setWhiteningDegree(req.getWhiteningDegree());

        ApiR<RetouchSkinResponse> aR = aRetouchSkinHandle.handle(request);
        if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
            RetouchSkinResponseBody.RetouchSkinResponseBodyData responseBodyData = aR.getData().getBody().getData();

            resp.setImageURL(responseBodyData.getImageURL());
            return R.ok().setData(resp);
        }
        return R.error(aR.getErrorMsg());
    }

}
