// 测试智能耳标API
const http = require('http');
const querystring = require('querystring');

// 配置
const baseUrl = 'localhost';
const port = 5352;
const apiPath = '/api/smart-earmark';

// 发送HTTP请求的函数
function sendRequest(method, path, data = null, headers = {}) {
  return new Promise((resolve, reject) => {
    const options = {
      hostname: baseUrl,
      port: port,
      path: path,
      method: method,
      headers: {
        'Content-Type': 'application/json',
        ...headers
      }
    };

    const req = http.request(options, (res) => {
      let data = '';
      
      res.on('data', (chunk) => {
        data += chunk;
      });

      res.on('end', () => {
        resolve({
          statusCode: res.statusCode,
          headers: res.headers,
          data: data ? JSON.parse(data) : null
        });
      });
    });

    req.on('error', (error) => {
      reject(error);
    });

    if (data) {
      req.write(JSON.stringify(data));
    }

    req.end();
  });
}

// 测试函数
async function runTests() {
  console.log('开始测试智能耳标API...');
  
  try {
    // 1. 先登录获取token
    console.log('\n1. 登录获取token...');
    const loginResponse = await sendRequest('POST', '/api/auth/login', {
      username: 'admin',
      password: '123456'
    });
    
    console.log('登录响应状态码:', loginResponse.statusCode);
    console.log('登录响应数据:', loginResponse.data);
    
    if (loginResponse.statusCode !== 200) {
      console.error('登录失败:', loginResponse);
      process.exit(1);
    }
    
    const token = loginResponse.data.data.token;
    console.log('登录成功，获取到token:', token);
    
    // 设置Authorization头
    const authHeaders = {
      'Authorization': `Bearer ${token}`
    };

    // 2. 获取智能耳标列表
    console.log('\n2. 获取智能耳标列表...');
    const listResponse = await sendRequest('GET', `${apiPath}?page=1&pageSize=10`, null, authHeaders);
    console.log('获取列表结果:', listResponse.statusCode);
    console.log('列表数据:', listResponse.data);
    
    // 3. 创建新的智能耳标
    console.log('\n3. 创建新的智能耳标...');
    const newEarmark = {
      earmarkId: `EM${Date.now().toString().slice(-4)}`,
      name: '测试智能耳标',
      status: 'inactive',
      battery: 95,
      remark: '这是一个测试耳标'
    };
    
    const createResponse = await sendRequest('POST', apiPath, newEarmark, authHeaders);
    console.log('创建结果:', createResponse.statusCode);
    console.log('创建的数据:', createResponse.data);
    
    if (createResponse.statusCode === 201 && createResponse.data?.data?.id) {
      const earmarkId = createResponse.data.data.id;
      
      // 4. 更新刚刚创建的智能耳标
      console.log('\n4. 更新智能耳标...');
      const updateData = {
        ...newEarmark,
        name: '更新后的测试耳标',
        status: 'active'
      };
      
      const updateResponse = await sendRequest('PUT', `${apiPath}/${earmarkId}`, updateData, authHeaders);
      console.log('更新结果:', updateResponse.statusCode);
      console.log('更新的数据:', updateResponse.data);
      
      // 5. 删除智能耳标
      console.log('\n5. 删除智能耳标...');
      const deleteResponse = await sendRequest('DELETE', `${apiPath}/${earmarkId}`, null, authHeaders);
      console.log('删除结果:', deleteResponse.statusCode);
      console.log('删除响应:', deleteResponse.data);
    }
    
    console.log('\n测试完成');
  } catch (error) {
    console.error('测试过程中出错:', error);
  }
}

// 运行测试
runTests();