package com.microservices.pms.project.service;

import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.pms.product.domain.vo.ProductReqSpecsAssociatedTestcaseDataVo;
import com.microservices.pms.project.domain.PmsProjectTestcase;
import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDataVo;
import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDetailVo;

import java.util.List;

/**
 * 测试用例管理Service接口
 *
 * @author otto
 * @date 2023-11-22
 */
public interface IPmsProjectTestcaseService {
    /**
     * 查询测试用例管理
     *
     * @param id 测试用例管理主键
     * @return 测试用例管理
     */
    public PmsProjectTestcase selectPmsProjectTestcaseById(Long id);

    /**
     * 查询测试用例管理列表
     *
     * @param pmsProjectTestcase 测试用例管理
     * @return 测试用例管理集合
     */
    public GenericsTableDataInfo<PmsProjectTestcaseDataVo> selectPmsProjectTestcasePageList(PmsProjectTestcase pmsProjectTestcase);

    /**
     * 新增测试用例管理
     *
     * @param pmsProjectTestcase 测试用例管理
     * @return 结果
     */
    public Long insertPmsProjectTestcase(PmsProjectTestcase pmsProjectTestcase);

    /**
     * 修改测试用例管理
     *
     * @param pmsProjectTestcase 测试用例管理
     * @return 结果
     */
    public int updatePmsProjectTestcase(PmsProjectTestcase pmsProjectTestcase);

    /**
     * 批量删除测试用例管理
     *
     * @param ids 需要删除的测试用例管理主键集合
     * @return 结果
     */
    public int deletePmsProjectTestcaseByIds(Long[] ids);

    /**
     * 删除测试用例管理信息
     *
     * @param id 测试用例管理主键
     * @return 结果
     */
    public int deletePmsProjectTestcaseById(Long id);

    /**
     * 查询测试用例数量
     *
     * @param pmsProjectTestcase 查询条件
     * @return 测试用例数量
     */
    Integer selectPmsProjectTestcaseCount(PmsProjectTestcase pmsProjectTestcase);

    /**
     * 查询测试用例详情
     *
     * @param id 测试用例ID
     * @return 测试用例详情
     */
    PmsProjectTestcaseDataVo selectPmsProjectTestcaseDataVoById(Long id);

    /**
     * 根据模块ID删除测试用例与模块的关联关系
     *
     * @param moduleId 模块ID
     */
    void updatePmsProjectTestcaseToNoModule(Long moduleId);

    /**
     * 批量更新测试用例
     *
     * @param batchUpdateVo 更新对象
     * @return 更新结果
     */
    int batchUpdatePmsProjectTestcase(JSONObject batchUpdateVo);

    /**
     * 查询测试用例详情
     *
     * @param pmsProjectTestcase 测试用例
     * @return 测试用例详情
     */
    PmsProjectTestcaseDetailVo toPmsProjectTestcaseDetailVo(PmsProjectTestcase pmsProjectTestcase);

    List<PmsProjectTestcase> selectPmsProjectTestcaseForSelectList(PmsProjectTestcase pmsProjectTestcase);

    List<PmsProjectTestcase> selectPmsProjectTestcaseForTestsheetList(PmsProjectTestcase pmsProjectTestcase);

    /**
     * 获取测试用例列表
     *
     * @param pmsProjectTestcaseSearch 搜索条件
     * @return 测试用例列表
     */
    List<PmsProjectTestcase> selectPmsProjectTestcaseList(PmsProjectTestcase pmsProjectTestcaseSearch);

    List<ProductReqSpecsAssociatedTestcaseDataVo> selectReqSpecsAssociatedTestcaseList(Long reqSpecsId);
}
