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

import com.yhy.module.core.controller.admin.workbench.vo.sync.ApplySyncReqVO;
import com.yhy.module.core.controller.admin.workbench.vo.sync.SetSyncReqVO;
import com.yhy.module.core.controller.admin.workbench.vo.sync.SyncLibraryDivisionRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.sync.SyncLibraryDivisionUpdateReqVO;
import com.yhy.module.core.controller.admin.workbench.vo.sync.SyncPendingRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.sync.SyncSourceUnitRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.sync.UnsetSyncReqVO;
import java.util.List;
import javax.validation.Valid;

/**
 * 同步库 Service 接口
 *
 * @author yhy
 */
public interface SyncLibraryService {

    /**
     * 获取项目同步库的分部分项树（合并所有同步库记录）
     *
     * @param projectId 项目ID
     * @return 树结构
     */
    List<SyncLibraryDivisionRespVO> getTree(Long projectId);

    /**
     * 获取项目同步库的来源单位工程列表
     *
     * @param projectId 项目ID
     * @return 来源单位工程列表
     */
    List<SyncSourceUnitRespVO> getSourceUnits(Long projectId);

    /**
     * 更新同步库分部分项节点
     *
     * @param reqVO 更新请求
     */
    void updateDivision(@Valid SyncLibraryDivisionUpdateReqVO reqVO);

    /**
     * 设为同步
     *
     * @param reqVO 请求
     */
    void setSync(@Valid SetSyncReqVO reqVO);

    /**
     * 解除同步
     *
     * @param reqVO 请求
     */
    void unsetSync(@Valid UnsetSyncReqVO reqVO);

    /**
     * 套用同步
     *
     * @param reqVO 请求
     */
    void applySync(@Valid ApplySyncReqVO reqVO);

    /**
     * 检查是否有待同步的变更
     *
     * @param compileTreeId 单位工程ID
     * @return 待同步变更列表
     */
    List<SyncPendingRespVO> checkPending(Long compileTreeId);
}
