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;

/**
 * @author OTTO
 */
public interface IPmsProductLibraryService {

    GenericsTableDataInfo<PmsProductLibraryComponentDataVo> selectComponentList(PmsProductLibraryComponentSearchVo search);

    PmsProductLibraryRepositoriesDataVo selectPmsProductLibraryDataByName(String enterpriseIdentifier, String repoName);

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


    /**
     * 查询产品库列表
     *
     * @param enterpriseIdentifier 组织标识
     * @param name                 产品库标识
     * @return 产品库列表
     */
    GenericsTableDataInfo<PmsProductLibrarySimpleVo> selectPmsProductLibraryPageList(String enterpriseIdentifier, String name);


    /**
     * 创建产品库
     *
     * @param productRepositoriesInputVo 产品库输入对象
     * @return 结果
     */
    int insertPmsProductLibrary(ProductRepositoriesInputVo productRepositoriesInputVo);

    /**
     * 更新产品库
     *
     * @param productRepositoriesOperateVo 产品库操作对象
     * @return 结果
     */
    int updatePmsProductLibrary(ProductRepositoriesOperateVo productRepositoriesOperateVo);

    /**
     * 删除产品库
     *
     * @param enterpriseIdentifier 组织标识
     * @param name                 产品库标识
     * @return 产品库
     */
    int deletePmsProductLibraryByName(String enterpriseIdentifier, String name);

    /**
     * 选择普通制品移入产品库
     *
     * @param commonAssetAddToProductRepoVo 普通制品移入产品库对象
     * @return 移入状态
     */
    boolean addCommonAssetToProductRepo(CommonAssetAddToProductRepoVo commonAssetAddToProductRepoVo);

    /**
     * 查询关键制品列表
     *
     * @param enterpriseIdentifier 组织标识
     * @param componentSearchVo    查询条件
     * @return 制品列表
     */
    NexusComponentResultVo<List<NexusResultDataVo>> selectPmsProductLibraryKeyComponentList(String enterpriseIdentifier, ComponentSearchVo componentSearchVo);

    boolean addDockerComponentToProductRepo(DockerComponentAddToProductRepoVo dockerComponentAddToProductRepoVo);

    boolean packagedProduct(String enterpriseIdentifier, String productRepoName);

    int updatePmsProductLibrary(PmsProductLibraryRepositories pmsProductLibraryRepositories);

    /**
     * 获取产品库打包对象
     *
     * @param enterpriseIdentifier 企业标识
     * @param productRepoName      产品库名称
     * @return 产品库打包对象
     */
    ProductPackagedResultVo getPackagedProduct(String enterpriseIdentifier, String productRepoName);

    /**
     * 上传产品库制品
     *
     * @param productComponentInputVo 产品库制品输入对象
     * @return 结果
     */
    Boolean uploadProductAsset(ProductComponentInputVo productComponentInputVo);

    GenericsTableDataInfo<DocResultVo> selectDocList(DocSearchVo docSearchVo);
}
