const request = require('./request.js');
const apiConfig = require('../config/api.js');

/**
 * API服务类
 */
class ApiService {
  
  // ==================== 认证相关 ====================
  
  /**
   * 用户登录
   * @param {string} username 用户名
   * @param {string} password 密码
   */
  login(username, password) {
    return request.post(apiConfig.endpoints.auth.login, {
      username,
      password
    });
  }

  /**
   * 获取用户信息
   */
  getUserInfo() {
    return request.get(apiConfig.endpoints.auth.userInfo);
  }

  /**
   * 用户退出登录
   */
  logout() {
    return request.post(apiConfig.endpoints.auth.logout);
  }

  // ==================== 养殖户管理 ====================
  
  /**
   * 获取养殖户列表
   * @param {Object} params 查询参数
   */
  getFarmers(params = {}) {
    return request.get(apiConfig.endpoints.farmer.list, params);
  }

  /**
   * 获取养殖户详情
   * @param {string} id 养殖户ID
   */
  getFarmerDetail(id) {
    return request.get(`${apiConfig.endpoints.farmer.detail}/${id}`);
  }

  /**
   * 创建养殖户
   * @param {Object} data 养殖户数据
   */
  createFarmer(data) {
    return request.post(apiConfig.endpoints.farmer.create, data);
  }

  /**
   * 更新养殖户信息
   * @param {string} id 养殖户ID
   * @param {Object} data 更新数据
   */
  updateFarmer(id, data) {
    return request.put(`${apiConfig.endpoints.farmer.update}/${id}`, data);
  }

  /**
   * 删除养殖户
   * @param {string} id 养殖户ID
   */
  deleteFarmer(id) {
    return request.delete(`${apiConfig.endpoints.farmer.delete}/${id}`);
  }

  /**
   * 重置养殖户密码
   * @param {string} id 养殖户ID
   */
  resetFarmerPassword(id) {
    return request.post(apiConfig.endpoints.farmer.resetPassword.replace('{id}', id));
  }

  /**
   * 获取养殖场类型列表
   */
  getFarmTypes() {
    return request.get(apiConfig.endpoints.farmer.farmTypes);
  }

  /**
   * 获取动物类型列表
   */
  getAnimalTypes() {
    return request.get(apiConfig.endpoints.farmer.animalTypes);
  }

  // ==================== 数据统计 ====================
  
  /**
   * 获取数据中心统计信息
   */
  getDataCenterStats() {
    return request.get(apiConfig.endpoints.statistics.dataCenter);
  }

  /**
   * 获取市场价格信息
   */
  getMarketPrice() {
    return request.get(apiConfig.endpoints.statistics.marketPrice);
  }

  // ==================== 设备管理 ====================
  
  /**
   * 获取设备告警列表
   * @param {Object} params 查询参数
   */
  getDeviceWarnings(params = {}) {
    return request.get(apiConfig.endpoints.device.warnings, params);
  }

  /**
   * 获取智能项圈列表
   * @param {Object} params 查询参数
   */
  getSmartCollars(params = {}) {
    return request.get(apiConfig.endpoints.device.smartCollars, params);
  }

  /**
   * 创建智能项圈
   * @param {Object} data 项圈数据
   */
  createSmartCollar(data) {
    return request.post(apiConfig.endpoints.device.smartCollars, data);
  }

  /**
   * 更新智能项圈
   * @param {string} id 项圈ID
   * @param {Object} data 更新数据
   */
  updateSmartCollar(id, data) {
    return request.put(`${apiConfig.endpoints.device.smartCollars}/${id}`, data);
  }

  /**
   * 删除智能项圈
   * @param {string} id 项圈ID
   */
  deleteSmartCollar(id) {
    return request.delete(`${apiConfig.endpoints.device.smartCollars}/${id}`);
  }

  // ==================== 疫情管理 ====================
  
  /**
   * 获取疫情记录列表
   * @param {Object} params 查询参数
   */
  getEpidemicRecords(params = {}) {
    return request.get(apiConfig.endpoints.epidemic.records, params);
  }

  /**
   * 获取疫情活动列表
   * @param {Object} params 查询参数
   */
  getEpidemicActivities(params = {}) {
    return request.get(apiConfig.endpoints.epidemic.activities, params);
  }

  /**
   * 获取疫苗列表
   * @param {Object} params 查询参数
   */
  getVaccines(params = {}) {
    return request.get(apiConfig.endpoints.epidemic.vaccines, params);
  }

  // ==================== 监管任务 ====================
  
  /**
   * 获取监管任务列表
   * @param {Object} params 查询参数
   */
  getSupervisionTasks(params = {}) {
    return request.get(apiConfig.endpoints.supervision.tasks, params);
  }

  // ==================== 审批流程 ====================
  
  /**
   * 获取审批流程列表
   * @param {Object} params 查询参数
   */
  getApprovalProcesses(params = {}) {
    return request.get(apiConfig.endpoints.approval.processes, params);
  }

  // ==================== 系统相关 ====================
  
  /**
   * 健康检查
   */
  healthCheck() {
    return request.get('/health');
  }

  // ==================== 通用方法 ====================
  
  /**
   * 上传文件
   * @param {string} filePath 文件路径
   * @param {string} name 文件字段名
   * @param {Object} formData 额外表单数据
   */
  uploadFile(filePath, name = 'file', formData = {}) {
    return new Promise((resolve, reject) => {
      const token = wx.getStorageSync('token');
      const header = {};
      
      if (token) {
        header['Authorization'] = `Bearer ${token}`;
      }
      
      wx.uploadFile({
        url: `${apiConfig.baseURL}/files/upload`,
        filePath,
        name,
        formData,
        header,
        success: (res) => {
          try {
            const data = JSON.parse(res.data);
            if (data.code === 200 || data.code === 0) {
              resolve(data);
            } else {
              reject(data);
            }
          } catch (e) {
            reject({ message: '文件上传失败' });
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  }
}

// 创建实例
const apiService = new ApiService();

module.exports = apiService;