package com.artfess.rescue.event.manager;

import com.alibaba.fastjson.JSONObject;
import com.artfess.base.model.CommonResult;
import com.artfess.base.query.PageList;
import com.artfess.base.query.QueryFilter;
import com.artfess.rescue.event.model.BizRescueHandle;
import com.artfess.rescue.event.model.BizRescueInfo;
import com.artfess.base.manager.BaseManager;
import com.artfess.rescue.event.vo.CountRescueByUserVO;
import com.artfess.rescue.event.vo.RescueLedgerVO;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;

import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 救援信息 服务类
 *
 * @company 阿特菲斯信息技术有限公司
 * @author 系统管理员
 * @since 2024-10-22
 */
public interface BizRescueInfoManager extends BaseManager<BizRescueInfo> {
    /**
     * 根据事件id和状态统计当前救援单是否存在符合条件的个数
     */
    int countByEventId(String eventId, List<Integer> status);

    /**
     * 保存实体类
     * @param entity
     * @return
     */
    boolean saveInfo(BizRescueInfo entity);

    /**
     * 更新实体类
     * @param entity
     * @return
     */
    boolean updateInfo(BizRescueInfo entity);

    /**
     * 委派任务
     * @param entity
     * @return
     */
    boolean appoint(BizRescueInfo entity);

    /**
     * 撤销救援
     * @param id
     * @return
     */
    boolean cancel(String id);

    /**
     * 根据id查询详情
     * @param id
     * @return
     */
    BizRescueInfo getDetailById(String id);

    /**
     * 根据事件id查询相关救援信息
     * @param eventId
     * @return
     */
    List<BizRescueInfo> getDetailByEventId(String eventId);


    BizRescueHandle setUser(String id, String node, LocalDateTime handleTime);

    /**
     * 根据权限分页查询
     * @param queryFilter
     * @return
     */
    PageList<BizRescueInfo> queryByPower(QueryFilter<BizRescueInfo> queryFilter);

    /**
     * 根据权限分页查询
     * @param queryFilter
     * @return
     */
    PageList<BizRescueInfo> queryByAppraise(QueryFilter<BizRescueInfo> queryFilter);

    /**
     * 根据救援id删除相关数据
     * @param rescueIds
     * @return
     */
    boolean batchDelete(List<String> rescueIds);

    /**
     * 根据权限分页查询
     * @param queryFilter
     * @return
     */
    PageList<BizRescueInfo> pushTaskList(QueryFilter<BizRescueInfo> queryFilter);

    /**
     * 拖车人员汇总统计
     *
     * @param queryFilter 救援分页条件
     * @return List<CountRescueByUserVO>
     */
    CommonResult<List<CountRescueByUserVO>> countByUser(QueryFilter<BizRescueInfo> queryFilter);

    /**
     * 拖车部门汇总统计
     *
     * @param queryFilter 救援分页条件
     * @return List<CountRescueByRoadVO>
     */
    CommonResult<JSONObject> countByRoad(QueryFilter<BizRescueInfo> queryFilter);

    /**
     * 巡查任务台账导出
     * @param queryFilter
     * @return
     */
    ResponseEntity<Resource> exportLedger(QueryFilter<BizRescueInfo> queryFilter);

    /**
     * 根据id查询档案明细
     * @param queryFilter
     * @return
     */
    RescueLedgerVO getTaskLedger(QueryFilter<BizRescueInfo> queryFilter);

    /**
     * 根据id查询档案明细
     * @param queryFilter
     * @return
     */
    void ledgerExport(HttpServletResponse response, QueryFilter<BizRescueInfo> queryFilter);
}
