package com.ai.da.service;

import com.ai.da.mapper.primary.entity.CollectionElement;
import com.ai.da.mapper.primary.entity.LibraryModelPoint;
import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

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

    /**
     * 上传元素图片
     *
     * @param collectionElementUploadDTO
     * @return
     */
    CollectionElementVO upload(CollectionElementUploadDTO collectionElementUploadDTO);

    /**
     * 删除元素图片
     *
     * @param id
     * @return
     */
    void delete(Long id);

    /**
     * 删除元素图片
     *
     * @param ids
     * @return
     */
    void batchDelete(List<Long> ids);

    /**
     * 生产印花图片
     *
     * @param generatePrintDTO
     * @return
     */
    GenerateCollectionItemVO generatePrint(CollectionGeneratePrintDTO generatePrintDTO);

    /**
     * 保存印花图片
     *
     * @param savePrintDTO
     * @return
     */
    Boolean savePrint(CollectionSavePrintDTO savePrintDTO);

    /**
     * 通过element保存library
     *
     * @param elements
     * @return
     */
    Boolean saveLibraryByCollectionElement(List<CollectionElement> elements, String timeZone);

    Boolean saveLibraryByCollectionElement(List<CollectionElement> elements, String timeZone, String modelSex, String ageGroup);

    /**
     * 校验element
     *
     * @param designDTO
     * @return
     */
    ValidateElementVO validateElement(DesignCollectionDTO designDTO);

    /**
     * 编辑
     *
     * @param elementVO
     * @return
     */
    void editSketchBoardsElement(ValidateElementVO elementVO, List<CollectionSketchDTO> sketchBoards);

    /**
     * 编辑
     *
     * @param elementVO
     * @return
     */
    void editPrintBoardsElement(ValidateElementVO elementVO, List<DesignCollectionPrintElementDTO> printBoards);

    /**
     * 关联element和collection
     *
     * @param elementIds
     * @param collectionId
     * @return
     */
    void relationCollection(List<Long> elementIds, Long collectionId);

    /**
     * 保存颜色板
     *
     * @param colorBoards
     * @return
     */
    List<CollectionElementVO> saveColorBoard(List<CollectionColorDTO> colorBoards, Long collectionId, String timeZone);


    /**
     * 根据collection查询
     *
     * @param collectionId
     * @return
     */
    List<CollectionElement> getByCollectionId(Long collectionId);

    List<CollectionElement> getByOnlyCollectionId(Long collectionId);

    DesignLibraryModelPointVO calculateTemplatePoint(LibraryModelPoint modelPoint, Integer high, Integer width, String templateUrl);

    DesignLibraryModelPointVO calculateTemplatePointTemplate(LibraryModelPoint modelPoint, Integer high, Integer width, String templateUrl);

    /**
     * 刷新历史数据
     */
    void refreshHistoryData();

    /**
     * 当level2Type发生改变时，修改levelType
     *
     * @param elementId
     * @param level2Type
     * @return
     */
    CollectionElement editLevel2Type(Long elementId, String level2Type, String designType);

    List<CollectionElement> getByProjectId(Long projectId);

    List<CollectionElementVO> selectedImageSeg(List<MultipartFile> files, Long id, String type, String sourceType);

    void updateElementLevel2Type(Long elementId, String level2Type);
}
