package com.cf.imes.module.executor.service.manage.plate;

import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate.PlateImportExcelVO;
import com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate.PlateImportRespVO;
import com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate.PlatePageReqVO;
import com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate.PlateSaveReqVO;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO;
import org.springframework.boot.system.ApplicationHome;

import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import java.io.File;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;

/**
 * 板材信息表 plate_{N} Service 接口
 *
 * @author 晨丰科技
 */
public interface PlateManageService {

    /**
     * 创建板材信息表 plate_{N}
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPlate(@Valid PlateSaveReqVO createReqVO);

    /**
     * 更新板材信息表 plate_{N}
     *
     * @param updateReqVO 更新信息
     */
    void updatePlate(@Valid PlateSaveReqVO updateReqVO);

    /**
     * 删除板材信息表 plate_{N}
     *
     * @param id 编号
     */
    void deletePlate(Long id,Long organId);

    /**
     * 获得板材信息表 plate_{N}
     *
     * @param id 编号
     * @return 板材信息表 plate_{N}
     */
    PlateGoodDO getPlate(Long id, Long organId);

    /**
     * 获得板材信息表 plate_{N}
     *
     * @param goodsId 编号
     * @return 板材信息表 plate_{N}
     */
    PlateGoodDO getPlateGoods(String goodsId);

    /**
     * 获得板材信息表 plate_{N}分页
     *
     * @param pageReqVO 分页查询
     * @return 板材信息表 plate_{N}分页
     */
    PageResult<PlateGoodDO> getPlatePage(PlatePageReqVO pageReqVO);

    /**
     * webcad获取板材信息表 plate_{N}分页
     *
     * @param pageReqVO 分页查询
     * @return 板材信息表 plate_{N}分页
     */
    PageResult<PlateGoodDO> webCadGetPlatePage(PlatePageReqVO pageReqVO);

    /**
     * 批量导入板材
     *
     * @param importUsers     导入板材列表
     * @param isUpdateSupport 是否支持更新
     * @return 导入结果
     */
    void importPlateList(List<PlateImportExcelVO> importUsers, boolean isUpdateSupport , Long organId);

    /**
     * 生产导入文件模板下载
     */
    void exportTemplate(HttpServletResponse response, String value);

    default String getSavePath() {
        ApplicationHome applicationHome = new ApplicationHome(this.getClass());

        // 保存目录位置根据项目需求可随意更改
        return applicationHome.getDir().getAbsolutePath() + File.separator + "type";

    }

    /**
     * 查询机构下所有板材信息
     *
     * @return
     */
    List<PlateGoodDO> getPlateAll();

    /**
     * 查询机构下所有商品编号
     *
     * @param organId
     * @return
     */
    Set<String> getOrgPlateGoodsId(Long organId);

    /**
     * 查询机构下名称、材质、颜色、厚度、品牌的分组
     *
     * @param organId
     * @return
     */
    List<LinkedHashMap<String, Object>> getOrgAttrGroup(Long organId);
}