// utils/api.js - API接口工具类

/**
 * 基础请求配置
 */
const API_BASE_URL = 'https://ad.ningmuyun.com/farm/api'

/**
 * 统一请求方法
 * @param {String} url - 接口路径
 * @param {String} method - 请求方法
 * @param {Object} data - 请求数据
 * @param {Boolean} needAuth - 是否需要token
 */
function request(url, method = 'GET', data = {}, needAuth = true) {
  return new Promise((resolve, reject) => {
    // 显示加载提示
    wx.showLoading({
      title: '加载中...',
      mask: true
    })

    // 构建请求头
    const header = {
      'Content-Type': 'application/json'
    }

    // 如果需要认证，添加token
    if (needAuth) {
      const token = wx.getStorageSync('token')
      if (token) {
        header['Authorization'] = `Bearer ${token}`
        // 或者根据后端要求使用其他格式
        // header['token'] = token
      }
    }

    wx.request({
      url: API_BASE_URL + url,
      method: method,
      data: data,
      header: header,
      success: (res) => {
        wx.hideLoading()
        
        // 根据后端返回的数据结构处理
        if (res.statusCode === 200) {
          console.log('API请求成功:', url, res)
          
          // 支持多种返回格式
          // 格式1: { success: true, ... }
          // 格式2: { code: 0, data: {}, message: '' }
          if (res.data.success === true || res.data.code === 0 || res.data.code === 200) {
            resolve(res.data)
          } else {
            // 业务错误
            wx.showToast({
              title: res.data.message || res.data.msg || '请求失败',
              icon: 'none',
              duration: 2000
            })
            reject(res.data)
          }
        } else if (res.statusCode === 401) {
          // 未授权，跳转到登录页
          console.error('API请求未授权:', url, res.statusCode)
          wx.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none'
          })
          setTimeout(() => {
            wx.reLaunch({
              url: '/pages/login/login'
            })
          }, 1500)
          reject(res)
        } else if (res.statusCode === 502 || res.statusCode === 503 || res.statusCode === 504) {
          // 服务器网关错误
          console.error('API服务器错误:', url, res.statusCode)
          wx.showToast({
            title: '服务器暂时不可用，请稍后重试',
            icon: 'none',
            duration: 2000
          })
          reject({ statusCode: res.statusCode, message: '服务器错误', url })
        } else {
          // 其他错误
          console.error('API请求错误:', url, res.statusCode, res)
          wx.showToast({
            title: `服务器错误(${res.statusCode})`,
            icon: 'none'
          })
          reject(res)
        }
      },
      fail: (err) => {
        wx.hideLoading()
        console.error('API请求失败:', url, err)
        
        wx.showToast({
          title: '网络请求失败',
          icon: 'none',
          duration: 2000
        })
        reject(err)
      }
    })
  })
}

/**
 * GET请求
 */
function get(url, data = {}, needAuth = true) {
  return request(url, 'GET', data, needAuth)
}

/**
 * POST请求
 */
function post(url, data = {}, needAuth = true) {
  return request(url, 'POST', data, needAuth)
}

/**
 * PUT请求
 */
function put(url, data = {}, needAuth = true) {
  return request(url, 'PUT', data, needAuth)
}

/**
 * DELETE请求
 */
function del(url, data = {}, needAuth = true) {
  return request(url, 'DELETE', data, needAuth)
}

/**
 * API接口定义
 */
const API = {
  // ==================== 认证相关 ====================
  
  /**
   * 用户登录
   * @param {String} username - 用户名
   * @param {String} password - 密码
   */
  login: (username, password) => {
    return post('/auth/login', { username, password }, false)
  },

  /**
   * 用户登出
   */
  logout: () => {
    return post('/auth/logout')
  },

  /**
   * 获取用户信息
   */
  getUserInfo: () => {
    return get('/auth/userinfo')
  },

  // ==================== 首页相关 ====================
  
  /**
   * 获取首页统计数据
   */
  getHomeStats: (type = 'collar') => {
    return get('/home/stats', { type })
  },

  /**
   * 获取告警列表
   */
  getAlertList: (params = {}) => {
    return get('/alerts', params)
  },

  // ==================== 牛只管理 ====================
  
  /**
   * 获取牛只列表
   */
  getCattleList: (params = {}) => {
    return get('/cattle/list', params)
  },

  /**
   * 获取牛只详情
   */
  getCattleDetail: (id) => {
    return get(`/cattle/${id}`)
  },

  // ==================== 设备管理 ====================
  
  /**
   * 获取设备列表
   */
  getDeviceList: (params = {}) => {
    return get('/device/list', params)
  },

  /**
   * 获取设备详情
   */
  getDeviceDetail: (id) => {
    return get(`/device/${id}`)
  },

  // ==================== 智能设备 ====================
  
  /**
   * 获取智能项圈列表
   */
  getCollarList: (params = {}) => {
    return get('/smart-devices/collars', params)
  },

  /**
   * 获取智能耳标列表
   */
  getEartagList: (params = {}) => {
    return get('/smart-devices/eartags', params)
  },

  /**
   * 获取智能主机列表
   */
  getHostList: (params = {}) => {
    return get('/smart-devices/hosts', params)
  },

  /**
   * 获取电子围栏列表
   */
  getFenceList: (params = {}) => {
    return get('/electronic-fence', params)
  },

  /**
   * 获取电子围栏详情
   */
  getFenceDetail: (id) => {
    return get(`/electronic-fence/${id}`)
  },

  // ==================== 牛只档案 ====================

  /**
   * 获取牛只档案列表
   */
  getCattleList: (params = {}) => {
    return get('/iot-cattle/public', params)
  },

  /**
   * 获取牛只档案详情
   */
  getCattleDetail: (id) => {
    return get(`/iot-cattle/public/${id}`)
  },

  // ==================== 转栏记录 ====================

  /**
   * 获取转栏记录列表
   */
  getTransferRecords: (params = {}) => {
    return get('/cattle-transfer-records', params)
  },

  /**
   * 获取转栏记录详情
   */
  getTransferRecordDetail: (id) => {
    return get(`/cattle-transfer-records/${id}`)
  },

  // ==================== 离栏记录 ====================

  /**
   * 获取离栏记录列表
   */
  getExitRecords: (params = {}) => {
    return get('/cattle-exit-records', params)
  },

  /**
   * 获取离栏记录详情
   */
  getExitRecordDetail: (id) => {
    return get(`/cattle-exit-records/${id}`)
  },

  // ==================== 栏舍设置 ====================

  /**
   * 获取栏舍列表
   */
  getPenList: (params = {}) => {
    return get('/cattle-pens', params)
  },

  /**
   * 获取栏舍详情
   */
  getPenDetail: (id) => {
    return get(`/cattle-pens/${id}`)
  },

  // ==================== 批次设置 ====================

  /**
   * 获取批次列表
   */
  getBatchList: (params = {}) => {
    return get('/cattle-batches', params)
  },

  /**
   * 获取批次详情
   */
  getBatchDetail: (id) => {
    return get(`/cattle-batches/${id}`)
  },

  // ==================== 智能预警 ====================

  /**
   * 获取智能项圈预警列表
   */
  getCollarAlerts: (params = {}) => {
    return get('/smart-alerts/public/collar', params)
  },

  /**
   * 获取智能项圈预警详情
   */
  getCollarAlertDetail: (id) => {
    return get(`/smart-alerts/public/collar/${id}`)
  },

  /**
   * 获取智能耳标预警列表
   */
  getEartagAlerts: (params = {}) => {
    return get('/smart-alerts/public/eartag', params)
  },

  /**
   * 获取智能耳标预警详情
   */
  getEartagAlertDetail: (id) => {
    return get(`/smart-alerts/public/eartag/${id}`)
  },

  // ==================== 更多接口... ====================
  // 根据实际需要继续添加
}

module.exports = {
  request,
  get,
  post,
  put,
  del,
  API
}

