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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import com.yhy.module.core.controller.admin.infoprice.vo.InfoPriceBookPageReqVO;
import com.yhy.module.core.controller.admin.infoprice.vo.InfoPriceBookRespVO;
import com.yhy.module.core.controller.admin.infoprice.vo.InfoPriceBookSaveReqVO;

import javax.validation.Valid;

/**
 * 信息价册 Service 接口
 *
 * @author yhy
 */
public interface InfoPriceBookService {

    /**
     * 创建信息价册
     *
     * @param createReqVO 创建信息
     * @return 信息价册ID
     */
    Long createInfoPriceBook(@Valid InfoPriceBookSaveReqVO createReqVO);

    /**
     * 更新信息价册
     *
     * @param updateReqVO 更新信息
     */
    void updateInfoPriceBook(@Valid InfoPriceBookSaveReqVO updateReqVO);

    /**
     * 删除信息价册
     *
     * @param id 信息价册ID
     */
    void deleteInfoPriceBook(Long id);

    /**
     * 获取信息价册
     *
     * @param id 信息价册ID
     * @return 信息价册信息
     */
    InfoPriceBookRespVO getInfoPriceBook(Long id);

    /**
     * 分页查询信息价册
     *
     * @param pageReqVO 分页查询条件
     * @return 分页结果
     */
    PageResult<InfoPriceBookRespVO> getInfoPriceBookPage(InfoPriceBookPageReqVO pageReqVO);

    /**
     * 分页查询信息价册（排除指定租户）
     *
     * @param pageReqVO 分页查询条件
     * @param excludeTenantId 要排除的租户ID
     * @return 分页结果
     */
    PageResult<InfoPriceBookRespVO> getInfoPriceBookPageExcludeTenant(InfoPriceBookPageReqVO pageReqVO, Long excludeTenantId);

    /**
     * 复制信息价册
     *
     * @param sourceId 源信息价册ID
     * @return 新信息价册ID
     */
    Long copyInfoPriceBook(Long sourceId);

    /**
     * 根据树节点ID查询全部信息价册
     *
     * @param treeNodeId 树节点ID
     * @param excludeBookId 排除的信息价册ID（可选）
     * @return 信息价册列表
     */
    java.util.List<InfoPriceBookRespVO> getInfoPriceBookAll(InfoPriceBookPageReqVO reqVO);

    /**
     * 根据树节点ID查询信息价册简要列表（工作台专用，不过滤发布状态）
     *
     * @param treeNodeId 树节点ID
     * @return 信息价册列表（仅包含id、name、startTime、endTime）
     */
    java.util.List<InfoPriceBookRespVO> getInfoPriceBookListForWorkbench(Long treeNodeId);
}
