package com.ai.da.service;

import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.mapper.primary.entity.CollectionSort;
import com.ai.da.mapper.primary.entity.Design;
import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*;
import com.ai.da.python.vo.DesignPythonObjects;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 服务类
 *
 * @author yanglei
 * @since 2022-09-11
 */
public interface DesignService extends IService<Design> {
    /**
     * design
     *
     * @param designDTO
     * @return
     */
    String designCollection(DesignCollectionDTO designDTO);

    /**
     * redesign
     *
     * @param reDesignDTO
     * @return
     */
    String reDesignCollection(ReDesignCollectionDTO reDesignDTO);

    /**
     * redesign
     *
     * @param designId
     * @return
     */
    DesignCollectionVO designItemList(Long designId);

    List<Long> relationImageIds(DesignPythonObjects pythonObjects);

    /**
     * @return
     */
    BigDecimal countDesignProcess();

    /**
     * like
     *
     * @param designLikeDTO
     * @return
     */
    DesignLikeVO like(DesignLikeDTO designLikeDTO);

    /**
     * dislike
     *
     * @param disDesignLikeDTO
     * @return
     */
    Boolean dislike(DisDesignLikeDTO disDesignLikeDTO);

    /**
     * generateHighDesign
     *
     * @param generateHighDesignDTO
     * @return
     */
    String generateHighDesign(GenerateHighDesignDTO generateHighDesignDTO);

    /**
     * deleteHighDesign
     *
     * @param generateHighDesignDTO
     * @return
     */
    Boolean deleteHighDesign(GenerateHighDesignDTO generateHighDesignDTO);

    /**
     * detail
     *
     * @param designItemId
     * @return
     */
    DesignItemDetailVO detail(Long designPythonOutfitId, Long designItemId);

    Integer designProcess(String processId);

    List<CollectionSketchVO> sketchesBoundingBox(ReDesignCollectionDTO reDesignCollectionDTO);

    List<String> getModel(List<Long> designItemIdList);

    Long getCountByUserAndTime(String startTime, String endTime, List<Long> accountIds);

    Boolean receiveDesignResults(JSONObject responseObject);

    DesignCollectionVO getDesignResult(String requestId, List<String> objectSignList);

    String designCloud(CloudTaskDTO cloudTaskDTO);

    void processDesignBatch(Map<String, Object> designBatchResult);

    Boolean sort(CollectionSortDTO userLikeSortDTO);

    IPage<CloudTaskVO> cloudPage(CloudPageDTO cloudPageDTO);

    CloudTaskResultVO getDesignCloudResult(DesignCloudResultQuery designCloudResultQuery);

    Boolean receiveDesignParams(ReceiveDesignParam receiveDesignParam);

    Boolean cloudTaskNameUpdate(CloudTaskDTO cloudTaskDTO);

    Boolean cloudTaskDelete(CloudTaskDTO cloudTaskDTO);
}
