package cn.cslg.pas.mapper;

import cn.cslg.pas.Application;
import cn.cslg.pas.common.model.dto.EventQueryPageDTO;
import cn.cslg.pas.common.model.dto.QueryInvestigationTypeProjectNumberDTO;
import cn.cslg.pas.common.model.vo.ApplicationScenarioEventNumberVO;
import cn.cslg.pas.common.model.vo.EventListItemVO;
import cn.cslg.pas.common.model.vo.InvestigationTypeProjectNumberVO;
import cn.cslg.pas.domain.ApplicationScenario;
import cn.cslg.pas.domain.Event;
import cn.cslg.pas.domain.Project;
import cn.cslg.pas.domain.Type;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 事件表的Mapper层接口
 *
 * @Author chenyu
 * @Date 2023/4/2
 */
@Repository
public interface EventMapper extends BaseMapper<Event> {
    /**
     * 根据名称和租户id统计数量
     *
     * @param questionName 事件名称
     * @param tenantId     租户id
     * @return 返回统计到的数量
     */
    int countByNameAndTenantId(String questionName, Integer tenantId);

    /**
     * 分页查询事件列表
     *
     * @param eventQueryPageDTO 事件的分页查询DTO类
     * @return 返回查询到的数据
     */
    List<EventListItemVO> queryList(EventQueryPageDTO eventQueryPageDTO);

    /**
     * 根据应用场景value和事件名称分页查询事件清单
     *
     * @param eventQueryPageDTO 查询参数
     * @return 返回查询到的列表
     */
    List<EventListItemVO> queryEvents(EventQueryPageDTO eventQueryPageDTO);

    /**
     * 查询9大应用场景及分别对应的事件数量
     *
     * @param tenantId 租户id
     * @return 返回查询到的数据
     */
    //List<ApplicationScenarioEventNumberVO> queryApplicationScenarioEventNumber(Integer tenantId);

    /**
     * 查询所有应用场景
     *
     * @return 返回查询到的数据
     */
    List<ApplicationScenario> queryApplicationScenarios();

    /**
     * 查询所有应用场景不是null的事件
     *
     * @param tenantId 租户id
     * @return 返回查询到的数据
     */
    List<EventListItemVO> queryEventsDirectApplicationScenario(Integer tenantId);

    /**
     * 查询所有应用场景是null的事件(去关联专题库表查询出应用场景，就作为事件的应用场景)
     *
     * @param tenantId 租户id
     * @return 返回查询到的数据
     */
    List<EventListItemVO> queryEventsInDirectApplicationScenario(Integer tenantId);


    /**
     * 根据应用场景查询调查类型
     *
     * @param applicationScenario 应用场景value
     * @return 返回查询到的数据
     */
    List<Type> queryTypeid(Integer applicationScenario);

    /**
     * 根据应用场景和事件id查询专题库
     *
     * @param applicationScenario 应用场景
     * @param eventId             事件id
     * @return 返回查询到的数据
     */
    List<Project> queryProjects(Integer applicationScenario, Integer eventId);

}
