package com.heyu.api.controller.imageenhan;

import com.aliyun.imageenhan20190930.models.GenerateCartoonizedImageResponse;
import com.aliyun.imageenhan20190930.models.GenerateCartoonizedImageResponseBody;
import com.heyu.api.alibaba.handle.imageenhan.AGenerateCartoonizedImageHandle;
import com.heyu.api.alibaba.request.imageenhan.AGenerateCartoonizedImageRequest;
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.GenerateCartoonizedReq;
import com.heyu.api.resp.imageenhan.GenerateCartoonizedResp;
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/GenerateCartoonizedImage?tab=DOC&lang=JAVA
 * 生成式图像卡通化
 * <p>
 * GenerateCartoonized mage
 *
 * 功能描述
 * 基于生成式大模型实现多种特效风格的图像生成。输入一张图像，选择想要生成的卡通化风格，即可生成与输入图像相同分辨率、特定风格的卡通化图像。 关于该接口功能的示意图如下（左侧为原图，右侧为处理后图片）：
 *
 *应用场景
 * 社交软件头像生成：用户可上传自拍照、萌宠、风景照，根据个人喜好指定卡通画风格，生成对应图片，可玩性较高。
 *
 * 特色优势
 * 卡通化要素广：基于生成式大模型，能够对人像、宠物、场景等要素进行处理，生成细腻生动的卡通化效果。
 * 风格多样：支持多种生成风格，满足不同用户的喜好和需求。
 * 智能化：可根据输入图片的人物性别、场景类别等进行智能识别，使得输出的图片在满足趣味性和美感的情况下贴近原图。
 * 高质量：生成图像质量高，瑕疵少。
 */
@Slf4j
@RestController
@RequestMapping("/image")
@NotIntercept
public class GenerateCartoonizedController extends BaseController {

    @Autowired
    private AGenerateCartoonizedImageHandle generateCartoonizedImageHandle;


    @RequestMapping("/cartoonized")
    @CacheResult
    public R cartoonized(GenerateCartoonizedReq req) {
        GenerateCartoonizedResp resp = new GenerateCartoonizedResp();

        AGenerateCartoonizedImageRequest request = new AGenerateCartoonizedImageRequest();
        request.setCartoonizedType(req.getCartoonizedType());
        request.setImageUrl(req.getImageUrl());
        request.setImageBase64(req.getImageBase64());

        ApiR<GenerateCartoonizedImageResponse> aR = generateCartoonizedImageHandle.handle(request);
        if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
            GenerateCartoonizedImageResponseBody.GenerateCartoonizedImageResponseBodyData responseBodyData = aR.getData().getBody().getData();
            resp.setImageURL(responseBodyData.getResultUrl());
            return R.ok().setData(resp);
        }

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