package com.czg.product.service;

import com.czg.product.dto.ConsInfoDTO;
import com.czg.product.entity.ConsInfo;
import com.czg.product.param.ConsInfoParam;
import com.czg.product.param.ConsSubUnitParam;
import com.czg.product.vo.ConsStatisticsVo;
import com.czg.product.vo.ConsStockRecord;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;

import java.util.List;

/**
 * 耗材信息
 *
 * @author Tankaikai tankaikai@aliyun.com
 * @since 1.0 2025-02-20
 */
public interface ConsInfoService extends IService<ConsInfo> {
    /**
     * 获取耗材信息分页
     *
     * @param param 查询参数
     * @return 耗材信息分页
     */
    Page<ConsInfoDTO> getConsInfoPage(ConsInfoDTO param);

    /**
     * 获取耗材信息列表
     *
     * @param param 查询参数
     * @return 耗材信息列表
     */
    List<ConsInfoDTO> getConsInfoList(ConsInfoDTO param);


    List<ConsStockRecord> getConsStockList(Long shopId);

    /**
     * 获取耗材信息详情
     *
     * @param id 耗材信息ID
     * @return 耗材信息详情
     */
    ConsInfoDTO getConsInfoById(Long id);

    /**
     * 新增耗材信息
     *
     * @param dto 耗材信息DTO
     * @return 新增耗材信息是否成功
     */
    boolean addConsInfo(ConsInfoDTO dto);

    /**
     * 更新耗材信息
     *
     * @param dto 耗材信息DTO
     * @return 更新耗材信息是否成功
     */
    boolean updateConsInfo(ConsInfoDTO dto);

    /**
     * 删除耗材信息
     *
     * @param id 耗材信息ID
     * @return 删除耗材信息是否成功
     */
    boolean deleteConsInfo(Long id);

    /**
     * 禁用耗材信息
     *
     * @param id 耗材信息ID
     */
    void disableConsInfo(Long id);

    /**
     * 启用耗材信息
     *
     * @param id 耗材信息ID
     */
    void enableConsInfo(Long id);

    /**
     * 是否检测耗材
     *
     * @param id      耗材信息ID
     * @param isStock 是否检测耗材
     */
    void onOffConsInfo(Long id, Integer isStock);


    /**
     * 修改耗材单位
     *
     * @param param 修改单位参数
     */
    void modifySubUnit(ConsSubUnitParam param);

    /**
     * 耗材数据统计
     * @param param 统计条件
     * @return 统计结果
     */
    ConsStatisticsVo statistics(ConsInfoParam param);

}