package com.heyu.api.controller.imageseg;

import com.aliyun.imageseg20191230.models.SegmentClothResponse;
import com.aliyun.imageseg20191230.models.SegmentClothResponseBody;
import com.heyu.api.alibaba.handle.imageseg.ASegmentClothHandle;
import com.heyu.api.alibaba.request.imageseg.ASegmentClothRequest;
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.imageseg.SegmentClothResp;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/***
 *
 *https://next.api.aliyun.com/api/imageseg/2019-12-30/SegmentCloth?tab=DOC&lang=JAVA&RegionId=cn-shanghai
 *
 *服饰分割
 *
 * SegmentCloth
 *
 * 功能描述
 * 服饰分割能力可以对输入人台服饰、真人服饰、纯服饰、虚拟人服饰等场景图片中的主体服饰进行像素级抠图，并返回抠图结果。服饰分割主要是针对图片中的服装进行精细化分割，服饰分割标准支持外套
 * 、上装（含内衬）、裤装、裙装、帽子、鞋子、包包品类分割，其他皮带、领带等装饰品等内容建议使用商品分割。 关于该接口功能的示例图如下： 输入原图（左）和输出结果图（右）
 *
 *
 *
 */
@Slf4j
@RestController
@RequestMapping("/cloth")
@NotIntercept
public class SegmentClothController extends BaseController {


    @Autowired
    private ASegmentClothHandle aSegmentClothHandle;


    @RequestMapping("/segment")
    @CacheResult
    public R changeSky(ASegmentClothRequest request) {
        List<SegmentClothResp> respList = new ArrayList<>();

        ApiR<SegmentClothResponse> aR = aSegmentClothHandle.handle(request);
        if (aR.isSuccess() && isSuccessStatusCode(aR.getData().getStatusCode())) {
            SegmentClothResponseBody.SegmentClothResponseBodyData responseBodyData = aR.getData().getBody().getData();

            if (CollectionUtils.isNotEmpty(responseBodyData.getElements())) {
                for (SegmentClothResponseBody.SegmentClothResponseBodyDataElements element : responseBodyData.getElements()) {

                    SegmentClothResp resp = new SegmentClothResp();
                    resp.setClassUrl(element.getClassUrl());
                    resp.setImageURL(element.getImageURL());
                    respList.add(resp);
                }
                return R.ok().setData(respList);
            }
        }
        return R.error(aR.getErrorMsg());

    }


}
