package com.heyu.api.controller.face;


import com.aliyun.facebody20191230.models.GenerateHumanAnimeStyleResponse;
import com.aliyun.facebody20191230.models.GenerateHumanAnimeStyleResponseBody;
import com.heyu.api.alibaba.handle.facebody.AGenerateHumanAnimeStyleHandle;
import com.heyu.api.alibaba.request.facebody.AGenerateHumanAnimeStyleRequest;
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.resp.face.GenerateHumanAnimeStyleResp;
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/GenerateHumanAnimeStyle?RegionId=cn-shanghai&tab=DOC&lang=JAVA
 *
 * 人物动漫化
 *
 * GenerateHumanAnimeStyle
 *
 * 人物动漫化能力可以将一张人物图像进行转换处理，生成卡通形象，并返回动漫化后的结果图像。
 *
 * 支持风格：国画（NEW）、港漫（NEW）、漫画风（NEW）、动画 3D（NEW）、日漫、3D、手绘、铅笔画和艺术特效 9 个风格。
 * 多人照片：可转换多人照片，一次可处理图片中最多 5 个人脸。
 *
 *
 *
 * 应用场景
 * 保护隐私：为保护图像中的人物隐私，将人物卡通化，可避免识别出原人物是谁。保留社交趣味度的同时避免过度娱乐化。
 * 社交娱乐：将自己的照片变成卡通人物，塑造可爱氛围，配上图文分享给朋友。
 * 特效应用：可用于打造个性头像以及趣味活动等场景。
 *
 *
 *
 */
@Slf4j
@RestController
@RequestMapping("/human")
@NotIntercept
public class GenerateHumanAnimeStyleController extends BaseController {


    @Autowired
    private AGenerateHumanAnimeStyleHandle aGenerateHumanAnimeStyleHandle;


    @RequestMapping("/animeStyle")
    @CacheResult
    public R animeStyle(AGenerateHumanAnimeStyleRequest req) {
        GenerateHumanAnimeStyleResp resp = new GenerateHumanAnimeStyleResp();
        ApiR<GenerateHumanAnimeStyleResponse> aR = aGenerateHumanAnimeStyleHandle.handle(req);
        if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
            GenerateHumanAnimeStyleResponseBody.GenerateHumanAnimeStyleResponseBodyData responseBodyData = aR.getData().getBody().getData();
            resp.setImageURL(responseBodyData.getImageURL());
            return R.ok().setData(resp);
        }
        return R.error(aR.getErrorMsg());
    }

}
