import request from '@/axios';

// ==================== 武术赛事异常事件管理接口 ====================

/**
 * 异常事件分页查询
 * @param {Number} current - 当前页,默认1
 * @param {Number} size - 每页条数,默认10
 * @param {Object} params - 查询参数
 * @param {Number} params.competitionId - 赛事ID
 * @param {Number} params.exceptionType - 异常类型（可选）
 * @param {Number} params.severity - 严重程度（可选）
 * @param {Number} params.status - 处理状态（可选）
 */
export const getExceptionList = (current, size, params) => {
  return request({
    url: '/api/blade-martial/exception/list',
    method: 'get',
    params: {
      current,
      size,
      ...params
    }
  })
}

/**
 * 获取异常事件详情
 * @param {Number} id - 异常事件ID
 */
export const getExceptionDetail = (id) => {
  return request({
    url: '/api/blade-martial/exception/detail',
    method: 'get',
    params: { id }
  })
}

/**
 * 上报异常事件
 * @param {Object} data - 异常事件数据
 * @param {Number} data.competitionId - 赛事ID
 * @param {Number} data.projectId - 项目ID（可选）
 * @param {Number} data.venueId - 场地ID（可选）
 * @param {Number} data.exceptionType - 异常类型（1设备故障2人员问题3时间冲突4评分异常5安全事故6其他）
 * @param {Number} data.severity - 严重程度（1轻微2一般3严重4紧急）
 * @param {String} data.title - 标题
 * @param {String} data.description - 描述
 * @param {String} data.reporterName - 上报人姓名
 * @param {String} data.reporterPhone - 上报人电话
 * @param {Array} data.images - 图片URL数组（可选）
 */
export const reportException = (data) => {
  return request({
    url: '/api/blade-martial/exception/report',
    method: 'post',
    data
  })
}

/**
 * 修改异常事件
 * @param {Object} data - 异常事件数据
 */
export const updateException = (data) => {
  return request({
    url: '/api/blade-martial/exception/update',
    method: 'post',
    data
  })
}

/**
 * 删除异常事件
 * @param {String} ids - 异常事件ID,多个用逗号分隔
 */
export const removeException = (ids) => {
  return request({
    url: '/api/blade-martial/exception/remove',
    method: 'post',
    params: { ids }
  })
}

/**
 * 处理异常事件
 * @param {Object} data - 处理数据
 * @param {Number} data.id - 异常事件ID
 * @param {String} data.handlerName - 处理人姓名
 * @param {String} data.handleResult - 处理结果
 * @param {String} data.handleNote - 处理备注
 */
export const handleException = (data) => {
  return request({
    url: '/api/blade-martial/exception/handle',
    method: 'post',
    data
  })
}

/**
 * 关闭异常事件
 * @param {Number} id - 异常事件ID
 * @param {String} closeReason - 关闭原因
 */
export const closeException = (id, closeReason) => {
  return request({
    url: '/api/blade-martial/exception/close',
    method: 'post',
    params: { id },
    data: { closeReason }
  })
}

/**
 * 重新打开异常事件
 * @param {Number} id - 异常事件ID
 * @param {String} reopenReason - 重开原因
 */
export const reopenException = (id, reopenReason) => {
  return request({
    url: '/api/blade-martial/exception/reopen',
    method: 'post',
    params: { id },
    data: { reopenReason }
  })
}

/**
 * 分配异常事件
 * @param {Object} data - 分配数据
 * @param {Number} data.id - 异常事件ID
 * @param {String} data.assigneeName - 分配人姓名
 * @param {String} data.assigneePhone - 分配人电话
 */
export const assignException = (data) => {
  return request({
    url: '/api/blade-martial/exception/assign',
    method: 'post',
    data
  })
}

/**
 * 获取待处理异常事件列表
 * @param {Number} competitionId - 赛事ID
 * @param {Number} severity - 严重程度（可选）
 */
export const getPendingExceptions = (competitionId, severity) => {
  return request({
    url: '/api/blade-martial/exception/pending',
    method: 'get',
    params: { competitionId, severity }
  })
}

/**
 * 获取我的异常事件列表
 * @param {Number} competitionId - 赛事ID
 * @param {String} assigneeName - 分配人姓名
 */
export const getMyExceptions = (competitionId, assigneeName) => {
  return request({
    url: '/api/blade-martial/exception/my-exceptions',
    method: 'get',
    params: { competitionId, assigneeName }
  })
}

/**
 * 获取异常事件统计
 * @param {Number} competitionId - 赛事ID
 */
export const getExceptionStatistics = (competitionId) => {
  return request({
    url: '/api/blade-martial/exception/statistics',
    method: 'get',
    params: { competitionId }
  })
}

/**
 * 按类型统计异常事件
 * @param {Number} competitionId - 赛事ID
 */
export const getExceptionByType = (competitionId) => {
  return request({
    url: '/api/blade-martial/exception/statistics-by-type',
    method: 'get',
    params: { competitionId }
  })
}

/**
 * 按严重程度统计异常事件
 * @param {Number} competitionId - 赛事ID
 */
export const getExceptionBySeverity = (competitionId) => {
  return request({
    url: '/api/blade-martial/exception/statistics-by-severity',
    method: 'get',
    params: { competitionId }
  })
}

/**
 * 上传异常事件图片
 * @param {File} file - 图片文件
 */
export const uploadExceptionImage = (file) => {
  const formData = new FormData()
  formData.append('file', file)
  return request({
    url: '/api/blade-martial/exception/upload-image',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 添加异常处理记录
 * @param {Object} data - 处理记录数据
 * @param {Number} data.exceptionId - 异常事件ID
 * @param {String} data.operatorName - 操作人姓名
 * @param {String} data.operationType - 操作类型
 * @param {String} data.operationNote - 操作备注
 */
export const addExceptionLog = (data) => {
  return request({
    url: '/api/blade-martial/exception/add-log',
    method: 'post',
    data
  })
}

/**
 * 获取异常处理记录
 * @param {Number} exceptionId - 异常事件ID
 */
export const getExceptionLogs = (exceptionId) => {
  return request({
    url: '/api/blade-martial/exception/logs',
    method: 'get',
    params: { exceptionId }
  })
}

/**
 * 导出异常事件报表
 * @param {Object} params - 导出参数
 */
export const exportExceptions = (params) => {
  return request({
    url: '/api/blade-martial/exception/export',
    method: 'get',
    params,
    responseType: 'blob'
  })
}
