import { http } from '@/utils/http/axios';
import type { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';

/**
 * @description: 应急处置
 */
export interface ProcedureListQuery {
  eventType?: string;
  eventName?: string;
  startTimeStart?: string;
  startTimeEnd?: string;
  status?: string; // 状态: 1-启动中，2-已结束，3-已关闭
}

export interface EmergencyProcedureManageStruct {
  id?: number; // 自增主键
  eventType?: string; // 事件类型（字典）
  eventLocation?: string; // 事件地点
  eventName?: string; // 事件名称
  emergencyPlanId?: number; // 应急预案id
  startTime?: string; // 启动时间
  status?: number; // 状态: 1-启动中，2-已结束，3-已关闭
  completeTime?: string; // 处置完成时间
  suggestion?: string; // 建议
  createdAt?: string; // 创建时间
  updatedAt?: string; // 更新时间
  isDeleted?: number; // 0-未删除，大于0(时间戳)-已删除
}

/**
 * @description: 分页查询应急处置任务列表
 */
export const getEmergencyProcedureList = (params: QueryPageRequest<ProcedureListQuery>) => {
  return http.request<QueryPageResponse<EmergencyProcedureManageStruct>>({
    url: '/emergencyHandleTask/queryEmergencyHandleTaskPage',
    method: 'post',
    params,
  });
};

/**
 * @description: 创建应急处置任务
 */
export const createEmergencyProcedure = (params: EmergencyProcedureManageStruct) => {
  return http.request({
    url: '/emergencyHandleTask/saveEmergencyHandleTask',
    method: 'post',
    params,
  });
};

/**
 * @description: 更新应急处置任务
 */
export const updateEmergencyProcedure = (params: EmergencyProcedureManageStruct) => {
  return http.request({
    url: '/emergencyHandleTask/updateEmergencyHandleTask',
    method: 'put',
    params,
  });
};

export interface LossRecordItem {
  id: number; // 自增主键
  handleTaskId: number; // 应急处置任务id
  isLoss: number; // 是否损失：0-否 1-是
  buildingNo: string; // 损失楼号
  floorNo: string; // 损失楼层
  roomNo: string; // 损失房间号
  affectedItems: string; // 受灾物品
  images: string; // 受灾图片
  description: string; // 损失描述
  safetyLevel: string; // 影响安全评估
  isAffectWork: number; // 是否影响正常工作：0-否，1-是
  estimatedLoss: string; // 损失预估金额
  priority: string; // 处置优先级
  responsibleDeptId: number; // 整改责任部门id
  responsibleDeptName: string; // 整改责任部门名称
  remark: string; // 备注
  createdBy: number; // 创建人
  createdAt: string; // 创建时间
  updatedAt: string; // 更新时间
  isDeleted: number; // 0-未删除，大于0(时间戳)-已删除
}
export interface QueryHandleCompleteInfoRes {
  completeTime: string; // 处置完成时间
  lossRecords: LossRecordItem[]; // 损失记录列表
  suggestion: string; // 总结与建议
}
/**
 * @description: 查询处置完成信息
 */
export const getEmergencyProcedureCompleteInfo = (handleTaskId: number) => {
  return http.request({
    url: `/emergencyHandleTask/queryHandleCompleteInfo?handleTaskId=${handleTaskId}`,
    method: 'get',
  });
};

export interface LossItemRecordParams {
  id?: number; // 自增主键
  handleTaskId?: number; // 应急处置任务id
  isLoss?: number; // 是否损失：0-否 1-是
  buildingNo?: string; // 损失楼号
  floorNo?: string; // 损失楼层
  roomNo?: string; // 损失房间号
  affectedItems?: string; // 受灾物品
  images?: string; // 受灾图片
  description?: string; // 损失描述
  safetyLevel?: string; // 影响安全评估
  isAffectWork?: number; // 是否影响正常工作：0-否，1-是
  estimatedLoss?: string; // 损失预估金额
  priority?: string; // 处置优先级
  responsibleDeptId?: number; // 整改责任部门id
  responsibleDeptName?: string; // 整改责任部门名称
  remark?: string; // 备注
  createdBy?: number; // 创建人
  createdAt?: string; // 创建时间
  updatedAt?: string; // 更新时间
  isDeleted?: number; // 0-未删除，大于0(时间戳)-已删除
}
/**
 * @description: 创建损失记录
 */
export const addLossItemRecord = (params: LossItemRecordParams) => {
  return http.request({
    url: '/emergencyHandleTask/saveLossRecord',
    method: 'post',
    params,
  });
};

export interface QueryAllDisasterHandleTaskRes {
  id: number; // 自增主键
  taskName: string; // 任务名称
  createdAt: string; // 创建时间
  updatedAt: string; // 更新时间
  isDeleted: number; // 0-未删除，大于0(时间戳)-已删除
}
/**
 * @description: 查询全部灾害处置任务（即关联损失记录的选项）
 */
export const getDisasterHandleTaskList = () => {
  return http.request({
    url: '/disasterHandle/queryAllDisasterHandleTask',
    method: 'get',
  });
};

export interface AssociateLossItemRecordParams {
  disasterHandleTaskId: number; // 灾害处置任务id
  emergencyHandleTaskId: number; // 应急处置任务id
}
/**
 * @description: 关联损失记录
 */
export const associateLossItemRecord = (params: AssociateLossItemRecordParams) => {
  return http.request({
    url: `/emergencyHandleTask/relateLossRecord?disasterHandleTaskId=${params.disasterHandleTaskId}&emergencyHandleTaskId=${params.emergencyHandleTaskId}`,
    method: 'post',
  });
};

/**
 * @description: 删除损失记录
 */
export const deleteLossItemRecord = (lossRecordId: number) => {
  return http.request({
    url: `/emergencyHandleTask/deleteLossRecord?lossRecordId=${lossRecordId}`,
    method: 'delete',
  });
};

export interface QueryEmergencyHandleReportRes {
  eventName: string; // 应急事件名称
  startTime: string; // 事件启动时间
  completeTime: string; // 事件结束时间
  duration: string; // 时长
  suggestion: string; // 建议
  lossRecordCount: string; // 损失记录数量
  safetyLevelDistributionList: SafetyLevelDistribution[]; // 影响安全分布列表
  disasterLocationDistributionList: DisasterLocationDistribution[]; // 受灾位置分布列表
}
export interface SafetyLevelDistribution {
  safetyLevel: string; // 安全等级
  count: number; // 数量
}
export interface DisasterLocationDistribution {
  buildingNo: number; // 楼号
  count: number; // 数量
}
/**
 * @description: 查询应急处置报表
 */
export const getEmergencyProcedureReport = (handleTaskId: number) => {
  return http.request({
    url: `/emergencyHandleTask/queryEmergencyHandleReport?handleTaskId=${handleTaskId}`,
    method: 'get',
  });
};

/**
 * @description: 根据id查询应急处置任务详情
 */
export const getEmergencyProcedureById = (handleTaskId: number) => {
  return http.request({
    url: `/emergencyHandleTask/queryEmergencyHandleTaskById?handleTaskId=${handleTaskId}`,
    method: 'get',
  });
};
