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

import com.yhy.module.core.controller.admin.workbench.vo.WbResourceSourceBoqRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.WbResourceSourceUnitRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.WbResourceSummaryRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.WbResourceSummaryTreeRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.WbResourceSummaryUpdateReqVO;
import java.util.List;
import javax.validation.Valid;

/**
 * 工料机汇总 Service 接口
 *
 * @author yhy
 */
public interface WbResourceSummaryService {

    /**
     * 获取工料机汇总树
     *
     * @param projectId 项目ID
     * @param compileTreeId 编制模式树的单位工程节点ID（可选，传了只汇总该单位工程）
     * @return 树结构
     */
    List<WbResourceSummaryTreeRespVO> getSummaryTree(Long projectId, Long compileTreeId);

    /**
     * 获取工料机汇总列表（按类别）
     *
     * @param projectId 项目ID
     * @param category 类别：labor/material/machine/bid_material
     * @param compileTreeId 编制模式树的单位工程节点ID（可选，传了只汇总该单位工程）
     * @return 汇总列表
     */
    List<WbResourceSummaryRespVO> getSummaryList(Long projectId, String category, Long compileTreeId);

    /**
     * 更新工料机汇总（打印、评标指定材料、编码等）
     *
     * @param updateReqVO 更新信息
     */
    void updateSummary(@Valid WbResourceSummaryUpdateReqVO updateReqVO);

    /**
     * 获取工料机来源-单位工程列表
     *
     * @param projectId 项目ID
     * @param resourceKey 资源唯一键
     * @return 单位工程列表
     */
    List<WbResourceSourceUnitRespVO> getSourceUnits(Long projectId, String resourceKey);

    /**
     * 获取工料机来源-清单列表
     *
     * @param compileTreeId 编制模式树ID（单位工程节点）
     * @param resourceKey 资源唯一键
     * @return 清单列表
     */
    List<WbResourceSourceBoqRespVO> getSourceBoqs(Long compileTreeId, String resourceKey);
}
