import store from '@/store'
import api from '@/utils/api'
// import { Message, MessageBox } from 'element-ui'
import { Message } from 'element-ui'

/**
* @description: 向对频api 提交数据
*/
export async function apiCrosFrequency (params) {
  const data = new URLSearchParams()// post对象参数 转成 字符串连接
  data.append('macAdd', params.macAdd)
  data.append('id', params.id)
  const res = await api.post('crosFrequency', data)
  if (res.data.status === 1) {
    Message.success(res.data.msg)
    store.dispatch('fetchAirList')// 更新飞机列表
  } else {
    Message.error(res.data.msg)
  }
  return res
}
/**
 * @description: 锁定站点 相关操作 同步操作订单表 和站点表接口
 * @param {*} form 表单.站点信息
 * @return {*} 服务器返回信息
 */
export async function lockSite (form) {
  const params = new URLSearchParams()
  params.append('site_id', form.site_id)
  params.append('shop_id', form.shop_id)
  params.append('runing', form.runing)
  params.append('order_id', form.order_id)
  params.append('shipment_status', form.shipment_status)
  params.append('by_plane_id', form.by_plane_id)
  const res = await api.post('lockSite', params)
  if (res.data.status === 1) {
    await store.dispatch('fetchSiteList')// 刷新站点列表
    store.dispatch('fetchRouteList')// 刷新航线列表
    store.dispatch('fetchPaidOrderList')// 刷订单点列表
    Message.success(res.data.msg)
  } else {
    Message.error(res.data.msg)
  }
  return res
}
/**
 * @description: 向改变订单承接任务api 提交数据,参数可以是数组 提交多个字段和字段内容  () ，并更新订单列表
 * @param {*} id 订单id
 * @param {array string} type 主状态"main_status" 货物状态"shipment_status" 退款状态"refund_status" 执行飞机"by_plane_id"
 * @param {array string} val  修改字段的值 ps:by_plane_id值给'' 数据库改为null
 */
export async function questAss (id, type, val) {
  const params = new URLSearchParams()// post对象参数 转成 字符串连接
  params.append('id', id)
  // 判断 type 和 val 是否为数组
  if (Array.isArray(type) && Array.isArray(val)) {
    if (type.length !== val.length) {
      return
    }
    for (let i = 0; i < type.length; i++) {
      params.append(type[i], val[i])
    }
  } else if (typeof type === 'string' && typeof val === 'string') {
    params.append(type, val)
  } else {
    return
  }

  const res = await api.post('questAss', params)
  if (res.data.status === 1) {
    Message.success(res.data.msg)
    store.dispatch('fetchPaidOrderList')// 更新订单列表
  } else {
    Message.error(res.data.msg)
    store.dispatch('fetchPaidOrderList')// 更新订单列表
  }
  return res
}
/**
 * @description: 获取订单列表
 * @param {*} orderSerch 搜索条件
 */
export async function getOrderList (orderSerch = {}) {
  const params = new URLSearchParams()// post对象参数 转成 字符串连接
  params.append('shop_id', orderSerch.shop_id)
  params.append('start_time', orderSerch.start_time)
  params.append('end_time', orderSerch.end_time)
  params.append('main_status', orderSerch.main_status)
  params.append('shipment_status', orderSerch.shipment_status)
  params.append('refund_status', orderSerch.refund_status)
  params.append('search', orderSerch.search)
  // 发送查询订单列表请求
  const res = await api.post('getOrderList', params, 'Admin')
  return res
}

/**
 * @description: 获取订单详情
 * @param {*} order_id 订单id
 */
export async function getOrderDetails (id) {
  const params = new URLSearchParams()// post对象参数 转成 字符串连接
  params.append('id', id)
  // 发送查询订单详情 求情
  const res = await api.post('getOrderDetails', params, 'Admin')
  return res
}

/**
 * @description: 退款函数
 * @param {*} orderSn 订单号
 * @param {*} shopId 商铺id
 * @param {*} refundPrice 退款金额 单位元
 * @param {*} refundType 退款类型 'buyer'买家申请 'seller'卖家主动
 */
export async function refund (orderSn, shopId, refundPrice, refundType) {
  // 构建请求参数
  const params = new URLSearchParams()
  params.append('order_sn', orderSn)
  params.append('shop_id', shopId)
  params.append('refund_price', refundPrice)
  params.append('refund_type', refundType)

  // 发送退款请求
  const res = await api.post('refund', params, 'Pay')
  if (res.data.status === 1) {
    Message.success('退款申请中...')
    console.log('退款成功', res.data.msg)
  } else {
    Message.error(res.data.msg)
    console.error('退款失败:', res.data.msg)
  }
  return res
}
/**
 * @abstract 录入日志
 * @param {*} log 日志内容
 */
export async function addLog (log) {
  // 构建请求参数
  const params = new URLSearchParams()
  params.append('log', log)
  const res = await api.post('addLog', params)
  return res
}

/**
 * @description: 向管理员用户发布公告
 * @param {*} shop_id 商铺 ID
 * @param {*} tit 公告标题
 * @param {*} message 公告内容
 * @param {*} idArr 接收公告的管理员ID数组
 * @param {*} endTime 公告截止时间（时间戳，秒级）
 */
export async function pubMessage (shopId, tit, message, idArr, endTime) {
  const params = new URLSearchParams()
  params.append('shop_id', shopId)
  params.append('tit', tit)
  params.append('message', message)
  params.append('idArr', idArr.join(',')) // 后端只收字符串
  params.append('endTime', endTime)

  const res = await api.post('pubMessage', params, 'Admin') // 第三个参数为模块名
  return res
}

/**
 * @description 获取全部公告列表（不限制过期、无admin_id限制）
 * @returns {Promise} 返回接口响应对象
 */
export async function getAllMessageList () {
  const res = await api.get('getAllMessageList', 'Admin')
  return res
}

/**
 * @description 删除指定公告
 * @param {Array} delIdArr 要删除的公告 ID 数组
 * @returns {Promise}
 */
export async function delMessage (delIdArr) {
  const params = new URLSearchParams()
  params.append('delIdArr', delIdArr.join(',')) // 后端通过 $_POST['delIdArr'] 接收

  const res = await api.post('deleteMessage', params, 'Admin')
  return res
}

/**
 * @abstract 获取指定飞机组的飞行数据（按时间范围）
 * @param {Array} idArr 飞机ID数组
 * @param {Number} startTime 开始时间
 * @param {Number} endTime 结束时间
 * @returns 飞行数据列表
 */
export async function getFlyData (idArr, startTime, endTime) {
  const params = new URLSearchParams()
  params.append('idArr', idArr.join(',')) // 后端只收字符串，用逗号分隔
  params.append('startTime', startTime)
  params.append('endTime', endTime)

  const res = await api.post('getFlyDataByIdArr', params, 'Plane')
  return res
}

/**
 * @abstract 删除指定的飞行数据记录
 * @param {Array} idArr 飞行数据记录ID数组
 * @returns 删除结果
 */
export async function deleteFlyData (idArr) {
  if (!Array.isArray(idArr) || idArr.length === 0) {
    throw new Error('参数错误，idArr 应为非空数组')
  }

  const params = new URLSearchParams()
  params.append('idArr', idArr.join(',')) // 逗号分隔传给后端

  const res = await api.post('deleteFlyDataByIdArr', params, 'Plane')
  return res
}
/**
 * @abstract 上传保存飞机飞行数据（解锁至加锁  即飞行结束触发）
 * @param {Object} data 包含 id, start_time, end_time, gps_path, distance, power_used
 */
export async function saveFlyData (data) {
  const params = new URLSearchParams()
  for (const key in data) {
    params.append(key, data[key])
  }
  const res = await api.post('saveFlyData', params, 'Plane')
  return res
}

/**
 * @description: 保存禁飞区数据
 * @param {string|number} shop_id 商铺ID
 * @param {Array} nofly_data 禁飞区数据数组
 * @param {Array} restrictfly_data 限制飞区数据数组
 * @returns {Object|null} 返回接口响应数据 或 null 表示失败
 */
export async function setNoflyData (shopId, noflyData) {
  try {
    const params = new URLSearchParams()
    params.append('shop_id', shopId || '')
    params.append('nofly_data', JSON.stringify(noflyData || []))

    const res = await api.post('setNoflyData', params)
    if (res.data.status === 1) {
      store.dispatch('fetchNoflyData', shopId)// 更新禁限飞区数据
      Message.success(res.data.msg)
    } else {
      Message.warning(res.data.msg)
    }
    return res.data
  } catch (error) {
    Message.error('保存禁飞区数据失败')
    return null
  }
}

/**
 * @description: 保存限飞区数据
 * @param {string|number} shop_id 商铺ID
 * @param {Array} restrictfly_data 限制飞区数据数组
 * @param {Array} restrictfly_height 限制飞区数据高度组
 * @returns {Object|null} 返回接口响应数据 或 null 表示失败
 */
export async function setRestrictflyData (shopId, restrictflyData, restrictflyHeight) {
  try {
    const params = new URLSearchParams()
    params.append('shop_id', shopId || '')
    params.append('restrictfly_data', JSON.stringify(restrictflyData || []))
    params.append('restrictfly_height', JSON.stringify(restrictflyHeight || []))

    const res = await api.post('setNoflyData', params)
    if (res.data.status === 1) {
      store.dispatch('fetchNoflyData', shopId)// 更新禁限飞区数据
      Message.success(res.data.msg)
    } else {
      Message.warning(res.data.msg)
    }
    return res.data
  } catch (error) {
    Message.error('保存限飞区数据失败')
    return null
  }
}
