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

import com.yhy.module.core.controller.admin.workbench.vo.audit.AuditApproveDivisionUpdateReqVO;
import com.yhy.module.core.controller.admin.workbench.vo.audit.AuditDivisionTreeRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.audit.AuditModeCreateReqVO;
import com.yhy.module.core.controller.admin.workbench.vo.audit.AuditModeRespVO;
import java.util.List;
import javax.validation.Valid;

/**
 * 审核模式 Service 接口
 *
 * @author yhy
 */
public interface AuditModeService {

    /**
     * 创建审核模式（复制审定快照）
     *
     * @param createReqVO 创建信息
     * @return 审核模式ID
     */
    Long createAuditMode(@Valid AuditModeCreateReqVO createReqVO);

    /**
     * 删除审核模式
     *
     * @param id 审核模式ID
     */
    void deleteAuditMode(Long id);

    /**
     * 获取审核模式详情
     *
     * @param id 审核模式ID
     * @return 审核模式详情
     */
    AuditModeRespVO getAuditMode(Long id);

    /**
     * 获取项目下的审核模式列表
     *
     * @param projectId 项目ID
     * @return 审核模式列表
     */
    List<AuditModeRespVO> getAuditModeList(Long projectId);

    /**
     * 更新审定数据
     *
     * @param updateReqVO 更新信息
     */
    void updateApproveData(@Valid AuditApproveDivisionUpdateReqVO updateReqVO);

    /**
     * 获取分部分项树（包含送审、审定、差异三组数据）
     *
     * @param auditModeId 审核模式ID
     * @param compileTreeId 编制模式树的单位工程节点ID
     * @return 分部分项树
     */
    List<AuditDivisionTreeRespVO> getDivisionTree(Long auditModeId, Long compileTreeId);
}
