package com.zc.business.service;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.zc.business.domain.*;

import java.util.List;
import java.util.Map;

/**
 * 事件预案Service接口
 *
 * @author wangjiabao
 * @date 2024-02-21
 */
public interface DcEmergencyPlansService {


    /**
     * 查询事件预案
     *
     * @param dcEmergencyPlans 事件预案
     * @return 结果
     */
    List<DcEmergencyPlans> selectDcEmergencyPlansList(DcEmergencyPlans dcEmergencyPlans);

    /**
     * 根据事件id查询事件预案
     *
     * @param id 事件预案
     * @return 结果
     */
    DcEmergencyPlans selectDcEmergencyPlans(Integer id);

    /**
     * 交通事件-根据事件类型查询事件预案
     *
     * @param event 交通事件
     * @return 结果
     */
    List<DcEmergencyPlans> selectDcEmergencyPlansByEventType(DcEvent event);

    /**
     * 处置设备智能发布的内容
     */
    void dispositionDeviceContent(List<DcEmergencyPlans> list, DcEvent dcEvent);

    /**
     * 交通事件-根据事件、单个执行操作筛选设备
     */
    List<DcDevice> selectDeviceListByEventDcExecuteAction(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);

    /**
     * 设备管控-确认按钮生成内容
     */
    DcExecuteAction confirmButtonToGenerateContent(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans, DcEvent dcEvent);

    /**
     * 交通事件-情报板确认回显原始模板
     */
    Map<String,List<DcInfoBoardTemplate>> eventBoardConfirm(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);

    /**
     * 交通事件确定
     *
     * @param dcEventAnDcEmergencyPlans 事件数据 和 事件预案数据
     * @return 结果
     */
    JSONObject executionEventConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);

    /**
     * 根据事件id-查询预案事件关联表
     *
     * @param eventId 事件id
     * @return 结果
     */
    List<EventPlanAssoc> selectEventPlanAssocByEventId(String eventId);

    /**
     * 根据id-查询预案事件关联表
     *
     * @param id id
     * @return 结果
     */
    EventPlanAssoc selectEventPlanAssocById(Long id);

    /**
     * 交通事件-情报板自动生成
     * @param dcEventAnDcEmergencyPlans
     * @return
     */
    DcInfoBoardTemplate eventAutomaticGeneration(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans);

    /**
     * 新增事件预案
     *
     * @param dcEmergencyPlans 事件预案
     * @return 结果
     */
    AjaxResult insertDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans);

    /**
     * 修改事件预案
     *
     * @param dcEmergencyPlans 事件预案
     * @return 结果
     */
    AjaxResult updateDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans);

    /**
     * 批量删除事件预案
     *
     * @param ids 事件预案
     * @return 结果
     */
    int deleteDcEmergencyPlans(String[] ids);
}