package cn.cslg.pas.service;

import cn.cslg.pas.common.JsonPage;
import cn.cslg.pas.common.model.dto.*;
import cn.cslg.pas.common.model.vo.ApplicationScenarioEventNumberVO;
import cn.cslg.pas.common.model.vo.InvestigationTypeProjectNumberVO;
import cn.cslg.pas.domain.Event;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 事件的Service层接口
 *
 * @Author chenyu
 * @Date 2023/4/2
 */
public interface IEventService extends IService<Event> {
    /**
     * 新增专题库时批量新增新事件（无事件id）
     *
     * @param eventAddNewDTOs 新增事件的DTO类对象集合
     * @return 返回事件eventIds
     */
    @Transactional
    List<Integer> addNew(List<EventAddNewDTO> eventAddNewDTOs);

    /**
     * 新增事件
     *
     * @param projectEventAddNewDTO 专题库新增事件的DTO类对象集合
     */
    @Transactional
    void addNewEvent(ProjectEventAddNewDTO projectEventAddNewDTO);

    /**
     * 分页查询事件
     *
     * @param eventQueryPageDTO 事件的分页查询DTO类对象
     */
    JsonPage query(EventQueryPageDTO eventQueryPageDTO);

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

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

    /**
     * 根据应用场景和事件id查询调查类型对应的专题库数量
     *
     * @param queryInvestigationTypeProjectNumberDTO 查询参数
     * @return 返回查询到的数据
     */
    List<InvestigationTypeProjectNumberVO> queryInvestigationTypeProjectNumber(QueryInvestigationTypeProjectNumberDTO queryInvestigationTypeProjectNumberDTO);


    /**
     * 修改事件
     *
     * @param eventUpdateDTO 修改事件的DTO类对象
     */
    @Transactional
    void update(EventUpdateDTO eventUpdateDTO);

    /**
     * 根据id删除事件
     *
     * @param eventId   事件id
     * @param projectId 专题库id
     */
    @Transactional
    void delete(Integer eventId, Integer projectId);

}
