package com.zksy.dispatch.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zksy.dispatch.domain.DisEvent;
import com.zksy.dispatch.domain.DisEventTrack;
import com.zksy.dispatch.domain.DisEventTransfer;
import com.zksy.dispatch.dto.DisEventPageDTO;
import com.zksy.dispatch.dto.DisEventVO;
import com.zksy.dispatch.dto.EventStatsVO;

/**
 * 应急事件统一档案 Service（全生命周期闭环）
 * 接报 -> 受理 -> 核实 -> 转接/报送 -> 跟踪/催办 -> 解除 -> 关闭
 */
public interface DisEventService extends IService<DisEvent> {

    /**
     * 新增接报：自动生成事件编号，创建统一事件主表并同步写接报明细
     */
    DisEvent saveReport(DisEvent event);

    /**
     * 分页查询（主表多条件，含最近环节扩展信息）
     */
    Page<DisEventVO> findByPage(DisEventPageDTO dto);

    /**
     * 事件详情（主表信息 + 各环节明细：核实/转接/跟踪/催办）
     */
    DisEventVO getDetail(Long id);

    /**
     * 受理：待受理 -> 待核实
     */
    void accept(Long id);

    /**
     * 核实：更新主表初判信息并写核实明细；不实事件为终止态
     */
    void verify(DisEvent event);

    /**
     * 转接：已核实 -> 处置中，更新责任单位并写转接明细
     */
    void transfer(DisEventTransfer transfer);

    /**
     * 报送：更新转接明细报送层级与附件，事件保持处置中
     */
    void report(DisEventTransfer transfer);

    /**
     * 跟踪：写跟踪单与跟踪日志，更新回访时间
     */
    void track(DisEventTrack track);

    /**
     * 解除：处置中 -> 已解除
     */
    void release(Long id);

    /**
     * 关闭：已解除 -> 已关闭，记录关闭原因/说明/损失
     */
    void close(DisEvent event);

    /**
     * 多维条件统计（与分页查询同一套筛选条件）
     */
    EventStatsVO stats(DisEventPageDTO dto);

    /**
     * 编辑事件基本信息（事件编号/状态不可改，状态通过流转接口）
     */
    void updateEvent(DisEvent event);
}
