package com.microservices.pms.productLibrary.service;

import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.pms.productLibrary.domain.PmsProductLibraryRepositories;
import com.microservices.pms.productLibrary.domain.vo.*;

import java.util.List;

/**
 * 制品库-仓库Service接口
 *
 * @author otto
 * @date 2024-06-20
 */
public interface IPmsProductLibraryRepositoriesService {

    /**
     * 新增制品库-仓库
     *
     * @param hostedPmsProductLibraryRepositoriesInputVo 制品库-仓库
     * @return 结果
     */
    public int insertHostedPmsProductLibraryRepositories(HostedRepositoriesInputVo hostedPmsProductLibraryRepositoriesInputVo);

    /**
     * 修改制品库-仓库
     *
     * @param hostedRepositoriesOperateVo 制品库-仓库
     * @return 结果
     */
    public int updateHostedPmsProductLibraryRepositories(HostedRepositoriesOperateVo hostedRepositoriesOperateVo);

    /**
     * 查询制品仓库分页列表
     *
     * @param enterpriseIdentifier 组织表示
     * @param searchVo             搜索制品库标识
     * @return 制品仓库分页列表
     */
    GenericsTableDataInfo<PmsProductLibraryRepositoriesSimpleVo> selectPmsProductLibraryRepositoriesPageList(String enterpriseIdentifier, PmsProductLibraryRepositoriesSearchVo searchVo);

    /**
     * 获取版本策略列表
     *
     * @return 版本策略列表
     */
    List<CommonTypeVo> selectVersionPolicyList();

    /**
     * 获取布局策略列表
     *
     * @return 布局策略列表
     */
    List<CommonTypeVo> selectLayoutPolicyList();

    /**
     * 获取制品库格式列表
     *
     * @return 制品库格式列表
     */
    List<CommonTypeVo> selectFormatList();

    /**
     * 获取制品库类型列表
     *
     * @return 制品库类型列表
     */
    List<CommonTypeVo> selectTypeList();

    /**
     * 通过名称删除制品库
     *
     * @param enterpriseIdentifier 组织标识
     * @param name                 制品库标识
     * @return 删除结果
     */
    int deletePmsProductLibraryRepositoriesByName(String enterpriseIdentifier, String name);

    /**
     * 根据组织标识和制品库标识查找制品库
     *
     * @param enterpriseIdentifier 组织标识
     * @param repoName             制品库标识
     * @return 制品库
     */
    PmsProductLibraryRepositories selectPmsProductLibraryRepositoriesByName(String enterpriseIdentifier, String repoName);

    /**
     * 创建虚拟仓库
     *
     * @param groupRepositoriesInputVo 虚拟仓库输入对象
     * @return 结果
     */
    int insertGroupPmsProductLibraryRepositories(GroupRepositoriesInputVo groupRepositoriesInputVo);

    /**
     * 更新虚拟仓库
     *
     * @param groupRepositoriesOperateVo 虚拟仓库操作对象
     * @return 结果
     */
    int updateGroupPmsProductLibraryRepositories(GroupRepositoriesOperateVo groupRepositoriesOperateVo);

    /**
     * 根据制品库标识获取制品库详情
     *
     * @param enterpriseIdentifier 组织标识
     * @param repoName             制品库标识
     * @return 制品库详情
     */
    PmsProductLibraryRepositoriesDataVo selectPmsProductLibraryRepositoriesDataByName(String enterpriseIdentifier, String repoName);


    void checkLockRepositoryStatus(String enterpriseIdentifier, Long repoId);

    void lockRepository(String enterpriseIdentifier, Long repoId);

    void unlockRepository(String enterpriseIdentifier, Long repoId);

    Boolean getLockRepositoryStatus(String enterpriseIdentifier, Long repoId);

    NexusHostedRepoInputVo getNexusRepo(String type, String format, String nexusSnapshotRepositoriesName);

    /**
     * 获取锁定状态的制品库Id列表
     *
     * @param enterpriseIdentifier 组织标识
     * @param repoIds              制品库id列表
     * @return 锁定中的制品库id列表
     */
    List<Long> getLockStatusRepositoryList(String enterpriseIdentifier, String repoIds);

    PmsProductLibraryRepositories selectPmsProductLibraryRepositoriesById(Long repoId);

    PmsProductLibraryRepositories getPmsProductLibraryRepositories(Boolean isProduct, String enterpriseIdentifier, String repositoryName, String snapshotName);
}
