package com.ruoyi.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.domain.Task;
import com.ruoyi.domain.TaskUserRelation;
import com.ruoyi.domain.vo.EnterpriseFilePdfVO;
import com.ruoyi.domain.vo.InspectionPersonnelVO;
import com.ruoyi.domain.vo.InspectionReportPdfVO;
import com.ruoyi.domain.vo.TestConclusionVO;
import com.ruoyi.web.request.TaskFindFinishRequest;
import com.ruoyi.web.request.TaskFindPendingRequest;
import com.ruoyi.web.request.TaskFindRequest;
import com.ruoyi.web.request.TaskListRequest;
import com.ruoyi.web.response.TaskFindResponse;
import com.ruoyi.web.response.TaskScenarioResponse;
import com.ruoyi.web.response.UserNameResponse;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface TaskMapper extends BaseMapper<Task> {

    List<Task> findList(TaskListRequest request);

    List<TaskFindResponse> findPending(@Param("request")TaskFindPendingRequest request,@Param("userId")Long userId);

    List<Task> findFinish(TaskFindFinishRequest request);

    List<Task> findUserFinish (@Param("request") TaskFindFinishRequest request,@Param("userId")Long userId);

    List<TaskFindResponse> findByUserId(@Param("request") TaskFindRequest request,@Param("userId")Long userId);

    Long findByCarReviewTaskId(@Param("carReviewId") Long carReviewId);

    Long findBySystemReviewTaskId(@Param("systemReviewId") Long systemReviewId);

    Task getByUserIdTemporary(@Param("userId") Long userId);

    Task getBySubtaskId(@Param("subId") Long subId);

    Long findTaskName(@Param("taskName") String taskName);

    Task findByName(@Param("taskName") String taskName);

    /**
     * 通过总任务ID,获取企业文件数据
     * @param taskId
     * @return
     */
    EnterpriseFilePdfVO selectEnterpriseFileData(@Param("taskId") Long taskId);

    /**
     * 通过总任务ID,获取检验报告数据
     * @param taskId
     * @return
     */
    InspectionReportPdfVO selectInspectionReportData(Long taskId);

    // 根据任务列表查询对应的场景数量
    List<TaskScenarioResponse> findByTaskList(@Param("responses") List<TaskFindResponse> responses);

    // 任务列表查询小组成员名称、部门
    List<UserNameResponse> findByUserIdList(@Param("responses") List<TaskFindResponse> responses);

    // 任务小组关系列表查询小组成员名称、部门
    List<UserNameResponse> findByRelation(@Param("relation") List<TaskUserRelation> relation);

    List<UserNameResponse> findByFinishTaskList(@Param("taskList") List<Task> taskList);

    /**
     * 通过总任务ID查询当前任务的每个子任务的结果
     * @param taskId
     * @return
     */
    TestConclusionVO selectTestConclusion(Long taskId);

    /**
     * 通过总任务ID查询当前任务的小组成员
     * @param taskId
     * @return
     */
    InspectionPersonnelVO selectInspectionPersonnelById(Long taskId);
}