package com.yhy.module.core.service.quota;

import com.yhy.module.core.controller.admin.quota.vo.QuotaMarketMaterialRespVO;
import com.yhy.module.core.controller.admin.quota.vo.QuotaMarketMaterialSaveReqVO;
import com.yhy.module.core.controller.admin.resource.vo.ResourceItemRespVO;
import com.yhy.module.core.dal.dataobject.quota.QuotaMarketMaterialDO;
import java.util.List;
import javax.validation.Valid;

/**
 * 定额市场主材设备 Service 接口
 * 
 * @author yhy
 */
public interface QuotaMarketMaterialService {

    /**
     * 添加定额市场主材设备
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMarketMaterial(@Valid QuotaMarketMaterialSaveReqVO createReqVO);

    /**
     * 更新定额市场主材设备
     *
     * @param updateReqVO 更新信息
     */
    void updateMarketMaterial(@Valid QuotaMarketMaterialSaveReqVO updateReqVO);

    /**
     * 删除定额市场主材设备
     *
     * @param id 编号
     */
    void deleteMarketMaterial(Long id);

    /**
     * 获得定额市场主材设备
     *
     * @param id 编号
     * @return 定额市场主材设备
     */
    QuotaMarketMaterialDO getMarketMaterial(Long id);

    /**
     * 获得定额市场主材设备列表
     *
     * @param quotaItemId 定额基价ID
     * @return 定额市场主材设备列表
     */
    List<QuotaMarketMaterialRespVO> getMarketMaterialList(Long quotaItemId);

    /**
     * 获取可选的工料机列表（已过滤范围）
     *
     * @param quotaItemId 定额基价ID
     * @return 可选的工料机列表
     */
    List<ResourceItemRespVO> getAvailableResourceItems(Long quotaItemId);

    /**
     * 获取可选的工料机列表（已过滤范围，支持模糊查询）
     *
     * @param quotaItemId 定额基价ID
     * @param code 编码（模糊查询，可选）
     * @param name 名称（模糊查询，可选）
     * @param spec 型号规格（模糊查询，可选）
     * @return 可选的工料机列表
     */
    List<ResourceItemRespVO> getAvailableResourceItemsWithFilter(Long quotaItemId, String code, String name, String spec);

    /**
     * 根据编码精确查询可用工料机
     *
     * @param quotaItemId 定额基价ID
     * @param code 工料机编码
     * @return 工料机信息，如果未找到返回null
     */
    ResourceItemRespVO getResourceItemByCode(Long quotaItemId, String code);

    /**
     * 批量添加定额市场主材设备
     *
     * @param quotaItemId 定额基价ID
     * @param materials 市场主材设备列表
     */
    void batchCreateMarketMaterials(Long quotaItemId, List<QuotaMarketMaterialSaveReqVO> materials);
}
