package com.cf.imes.module.executor.service.veneer;

import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerClassificationNameRespVO;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerClassificationNameSaveReqVO;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerDefectSaveReqVO;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO;
import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO;
import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 贴皮管理 Service接口
 *
 * @author Gqr
 * @since 2026/1/4 14:24
 */
public interface VeneerService {

    /**
     * 新增贴皮
     *
     * @param reqVO
     * @return
     */
    Long create(VeneerSaveReqVO reqVO);

    /**
     * 编辑贴皮
     *
     * @param reqVO
     * @return
     */
    void update(VeneerSaveReqVO reqVO);

    /**
     * 删除贴皮
     *
     * @param id
     * @return
     */
    void delete(Long id);

    /**
     * 上传贴皮照片
     *
     * @param id   贴皮id
     * @param file 贴皮图片
     * @return
     */
    Long uploadPic(Long id, MultipartFile file) throws IOException;

    /**
     * 贴皮导入模版下载
     *
     * @throws IOException
     */
    void importTemplateDownload(HttpServletResponse response);

    /**
     * 分页查询贴皮
     *
     * @param pageReqVO
     * @return
     */
    PageResult<VeneerRespVO> getPage(VeneerPageReqVO pageReqVO);

    /**
     * 根据id查询贴皮数据
     *
     * @param id
     * @return
     */
    VeneerRespVO get(Long id);

    /**
     * 获取组织下所有贴皮编号：id的组合
     *
     * @return
     */
    Map<String, Long> getOrgVeneerNo();

    /**
     * 批量新增贴皮
     *
     * @param list
     */
    void batchInsert(List<VeneerDO> list);

    /**
     * 批量更新贴皮
     *
     * @param list
     */
    void batchUpdate(List<VeneerDO> list);

    /**
     * 保存瑕疵数据
     *
     * @param defectSaveReqVO
     * @return
     */
    void saveDefect(VeneerDefectSaveReqVO defectSaveReqVO);

    /**
     * 新增分类名称
     *
     * @param saveReqVO 名称
     * @return
     */
    Long addClassificationName(VeneerClassificationNameSaveReqVO saveReqVO);

    /**
     * 删除分类名称
     *
     * @param id 分类名称ID
     */
    void deleteClassificationName(Long id);

    /**
     * 获取组织分类名称列表
     *
     * @return
     */
    List<VeneerClassificationNameRespVO> getOrgVeneerClassificationNameList();
}
