package com.heyu.api.controller.imageseg;


import com.aliyun.imageseg20191230.models.SegmentHDSkyResponse;
import com.aliyun.imageseg20191230.models.SegmentHDSkyResponseBody;
import com.heyu.api.alibaba.handle.imageseg.ASegmentHDSkyHandle;
import com.heyu.api.alibaba.request.imageseg.ASegmentHDSkyRequest;
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.SegmentHDSkyReq;
import com.heyu.api.resp.imageseg.SegmentHDSkyResp;
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/SegmentHDSky?tab=DOC
 * <p>
 * <p>
 * 天空高清分割 SegmentHDSky
 *
 * 应用场景
 * 户外美照：当您在户外所拍摄的照片天空不够蔚蓝通透时，无论多复杂的场景，天空高清分割都可以将天空部分抠出，您可以换上美美的天空，让照片达到理想的视觉效果。
 *
 * 特色优势
 * 支持更大分辨率：天空高清分割最大可以识别分辨率 5000×5000 像素的图片，更适合商业摄影的高水准后期处理。
 * 支持更多细节：天空高清分割可以得到更精细的图片，展现更多的细节。
 *
 *
 */
@Slf4j
@RestController
@RequestMapping("/sky")
@NotIntercept
public class SegmentHDSkyController extends BaseController {


    @Autowired
    private ASegmentHDSkyHandle segmentHDSkyHandle;


    @RequestMapping("/hd/segment")
    @CacheResult
    public R segment(SegmentHDSkyReq request) {
        SegmentHDSkyResp resp = new SegmentHDSkyResp();
        ASegmentHDSkyRequest aSegmentHDSkyRequest = new ASegmentHDSkyRequest();
        aSegmentHDSkyRequest.setImageBase64(request.getImageBase64());
        aSegmentHDSkyRequest.setImageUrl(request.getImageUrl());

        ApiR<SegmentHDSkyResponse> aR = segmentHDSkyHandle.handle(aSegmentHDSkyRequest);
        if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
            SegmentHDSkyResponseBody.SegmentHDSkyResponseBodyData responseBodyData = aR.getData().getBody().getData();
            resp.setImageURL(responseBodyData.getImageURL());
            return R.ok().setData(resp);
        }
        return R.error(aR.getErrorMsg());
    }


}