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

import com.yhy.module.core.dal.dataobject.workbench.*;

import java.util.List;

/**
 * 工作台快照读取服务
 * 
 * 提供从快照表读取数据的方法，只从快照表读取，不回退到后台标准库
 *
 * @author yihuiyong
 */
public interface WbSnapshotReadService {

    /**
     * 获取费率模板列表（只从快照表读取）
     *
     * @param compileTreeId 单位工程ID
     * @param rateModeId 费率模式ID（保留参数，不再用于回退）
     * @return 费率模板列表，快照不存在返回空列表
     */
    List<WbRateItemDO> getRateItems(Long compileTreeId, Long rateModeId);

    /**
     * 获取取费模板列表（只从快照表读取）
     *
     * @param compileTreeId 单位工程ID
     * @param rateModeId 费率模式ID（保留参数，不再用于回退）
     * @return 取费模板列表，快照不存在返回空列表
     */
    List<WbFeeItemDO> getFeeItems(Long compileTreeId, Long rateModeId);

    /**
     * 获取统一取费设置列表（只从快照表读取）
     *
     * @param compileTreeId 单位工程ID
     * @param rateModeId 费率模式ID（保留参数，不再用于回退）
     * @return 统一取费设置列表，快照不存在返回空列表
     */
    List<WbUnifiedFeeSettingDO> getUnifiedFeeSettings(Long compileTreeId, Long rateModeId);

    /**
     * 获取统一取费子目工料机列表
     *
     * @param compileTreeId 单位工程ID
     * @param unifiedFeeSettingId 统一取费设置ID（快照表中的ID）
     * @return 子目工料机列表
     */
    List<WbUnifiedFeeResourceDO> getUnifiedFeeResources(Long compileTreeId, Long unifiedFeeSettingId);

    /**
     * 获取机类树列表（只从快照表读取）
     *
     * @param compileTreeId 单位工程ID
     * @param quotaCatalogItemId 定额专业ID（保留参数，不再用于回退）
     * @return 机类树列表，快照不存在返回空列表
     */
    List<WbCategoryTreeDO> getCategoryTree(Long compileTreeId, Long quotaCatalogItemId);

    /**
     * 获取机类映射列表
     *
     * @param compileTreeId 单位工程ID
     * @param categoryTreeId 机类树节点ID（快照表中的ID）
     * @return 机类映射列表
     */
    List<WbCategoryTreeMappingDO> getCategoryTreeMappings(Long compileTreeId, Long categoryTreeId);

    /**
     * 检查单位工程是否有快照数据
     *
     * @param compileTreeId 单位工程ID
     * @return 是否有快照
     */
    boolean hasSnapshot(Long compileTreeId);

    /**
     * 根据快照费率项ID获取费率项
     *
     * @param compileTreeId 单位工程ID
     * @param snapshotRateItemId 快照表中的费率项ID
     * @return 费率项
     */
    WbRateItemDO getRateItemById(Long compileTreeId, Long snapshotRateItemId);

    /**
     * 获取取费项树形结构（含费率项信息）
     * 
     * 只从快照表读取，快照不存在返回null
     * 返回与 QuotaFeeItemWithRateRespVO 兼容的树形结构
     *
     * @param compileTreeId 单位工程ID
     * @param rateModeId 费率模式ID
     * @return 取费项树形列表，快照不存在返回null
     */
    java.util.List<com.yhy.module.core.controller.admin.quota.vo.QuotaFeeItemWithRateRespVO> getFeeItemWithRateTree(Long compileTreeId, Long rateModeId);

    /**
     * 获取费率字段标签列表
     * 
     * 从快照表读取，如果快照不存在则返回null
     *
     * @param compileTreeId 单位工程ID
     * @param rateModeId 费率模式ID
     * @return 字段标签列表，如果快照不存在则返回null
     */
    java.util.List<com.yhy.module.core.dal.dataobject.workbench.WbRateFieldLabelDO> getRateFieldLabels(Long compileTreeId, Long rateModeId);
}
