package com.ai.da.service;

import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.mapper.primary.entity.*;
import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import io.minio.errors.MinioException;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 服务类
 *
 * @author yanglei
 * @since 2022-09-11
 */
public interface UserLikeGroupService extends IService<UserLikeGroup> {

    void deleteUserGroup(Long userGroupId);

    HistoryUpdateVO updateUserGroupName(Long userGroupId, String userGroupName, String timeZone);

    Long insertUserGroup(Long userId, Long collectionId, String timeZone, Long projectId);

    /**
     * choose
     *
     * @param userGroupId
     * @return
     */
    UserLikeChooseVO choose(Long userGroupId);

    ProjectChooseVO choose(ProjectDTO projectDTO);

    UserLikeGroup getByProjectId(Long projectId);

    void deleteTrialData(Long id);

    void updateDate(Long id, String timeZone);

    Long exportSave(MultipartFile file, Long projectId, String module, Long designItemDetailId);

    List<ToProductImageResultVO> toProduct(ToProductImageDTO toProductImageDTO);

    void toProduct(String taskId);

    ToProductElementVO toProductImageElementUpload(MultipartFile file, Long projectId, String type);

    CollectionSort productImageLike(ProductImageLikeDTO productImageLikeDTO);

    List<MagicToolResultVO> getToProductImageResultList(List<String> taskIdList);

    JSONObject exportSearch(ExportSearchDTO exportSearchDTO);

    CanvasElementUpload canvasElementUpload(MultipartFile file);

    List<ToProductImageResultVO> productImageLikeList(ToProductImageDTO toProductImageDTO);

    Boolean productImageUnLike(ProductImageLikeDTO productImageLikeDTO);

    void relight(String taskId);

    List<ToProductImageResultVO> relight(ToProductImageDTO toProductImageDTO);

    List<MagicToolResultVO> getRelightResult(List<String> taskIdList);

    void deleteToProductRelightResult(Long id, Long projectId, String type);

    String likeHistoryRelSketch();

    String download();

    Boolean productImageInitialize(ProductImageInitializeDTO productImageInitializeDTO);

    InitializeProgressVO getInitializeProgress(ProductImageInitializeDTO productImageInitializeDTO);

    IPage<ProjectVO> getPage(ProjectQueryDTO projectQueryDTO);

    ModuleChooseVO getModuleContent(ProjectDTO projectDTO);

    ModuleChooseVO saveModuleContent(ModuleSaveDTO moduleSaveDTO);

    QueryLibraryPageVO getMannequinDetail(MannequinDTO mannequinDTO);

    BrandLogoUploadVO brandLogoUpload(MultipartFile file);

    Boolean brandDNASaveOrUpdate(BrandDNADTO brandDNADTO);

    LibraryUpdateVo brandDNAUpload(MultipartFile file, Long brandId) throws IOException;

    PageBaseResponse<BrandDNAVO> brandDNAPage(BrandDNAQueryDTO brandDNAQueryDTO);

    BrandDNAGenerateVO brandDNAGenerate(String prompt);

    IPage<ThreeDLayoutVO> getThreeDLayoutPage(ThreeDLayoutQueryDTO threeDLayoutQueryDTO);

    ThreeDVO getLayoutDetail(Long threeDSimpleId);

    ThreeDSizeVO getThreeDSize(Long threeDSimpleId);

    void getThreeDGlb(Long threeDSimpleId, HttpServletResponse response) throws MinioException, IOException;

    String downloadZip(Long threeDSimpleId, String sizeType, String size, HttpServletResponse response) throws MinioException, IOException;

    Boolean delete(Long projectId);

    Boolean brandDNADelete(BrandDNADTO brandDNADTO);

    void toProductBatch(String taskId, String url, String progress) throws InterruptedException;

    void relightBatch(String taskId, String url, String progress);

    Boolean collectionLikeUpdate(CollectionLikeUpdateDTO collectionLikeUpdateDTO);

    Boolean toProductImageElementDelete(Long id);

    ToProductElementVO convertRelightElement(Long id);
}
