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

import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsCadPageReqVO;
import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsImportExcelVO;
import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsPageReqVO;
import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsSaveReqVO;
import com.cf.imes.module.executor.dal.dataobject.orderParts.PartsDO;
import org.springframework.boot.system.ApplicationHome;

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

/**
 * 配件表 parts_{N} Service 接口
 *
 * @author 晨丰科技
 */
public interface PartsService {

    /**
     * 创建配件表 parts_{N}
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long create(@Valid PartsSaveReqVO createReqVO);

    /**
     * 更新配件表 parts_{N}
     *
     * @param updateReqVO 更新信息
     */
    void update(@Valid PartsSaveReqVO updateReqVO);

    /**
     * 删除配件表 parts_{N}
     *
     * @param id 编号
     */
    void delete(Long id, Long organId);

    /**
     * 获得配件表 parts_{N}
     *
     * @param id 编号
     * @return 配件表 parts_{N}
     */
    PartsDO get(Long id, Long organId);

    /**
     * 获得配件表 parts_{N}分页
     *
     * @param pageReqVO 分页查询
     * @return 配件表 parts_{N}分页
     */
    PageResult<PartsDO> getPage(PartsPageReqVO pageReqVO);

    /**
     * webcad获取配件表 parts_{N}分页
     *
     * @param pageReqVO 分页查询
     * @return 配件表 parts_{N}分页
     */
    PageResult<PartsDO> webCadGetPage(PartsPageReqVO pageReqVO);

    PageResult<PartsDO> getCadPage(PartsCadPageReqVO pageReqVO);

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

    /**
     * 批量导入配件
     *
     * @param importParts     导入配件列表
     * @param isUpdateSupport 是否支持更新
     */
    void importPartsList(List<PartsImportExcelVO> importParts, boolean isUpdateSupport, Long organId);


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

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

    }

    List<PartsDO> getPartAll(String category);
}