const http = require('http');
const fs = require('fs');
const path = require('path');

function uploadFile(filePath) {
  return new Promise((resolve, reject) => {
    const boundary = '----WebKitFormBoundary' + Math.random().toString(36).substring(2);
    
    const fileName = path.basename(filePath);
    const fileContent = fs.readFileSync(filePath);
    
    // 构建 multipart/form-data 请求体
    let body = `--${boundary}\r\n`;
    body += `Content-Disposition: form-data; name="file"; filename="${fileName}"\r\n`;
    body += `Content-Type: image/png\r\n\r\n`;
    body += fileContent;
    body += `\r\n`;
    
    body += `--${boundary}\r\n`;
    body += `Content-Disposition: form-data; name="type"\r\n\r\n`;
    body += `image\r\n`;
    
    body += `--${boundary}\r\n`;
    body += `Content-Disposition: form-data; name="name"\r\n\r\n`;
    body += `${fileName}\r\n`;
    
    body += `--${boundary}--\r\n`;
    
    const options = {
      hostname: 'localhost',
      port: 3000,
      path: '/api/video/materials/upload',
      method: 'POST',
      headers: {
        'Content-Type': `multipart/form-data; boundary=${boundary}`,
        'Content-Length': Buffer.byteLength(body)
      }
    };
    
    const req = http.request(options, (res) => {
      let data = '';
      res.on('data', chunk => data += chunk);
      res.on('end', () => {
        try {
          const json = JSON.parse(data);
          resolve({ status: res.statusCode, data: json });
        } catch (e) {
          resolve({ status: res.statusCode, data: data });
        }
      });
    });
    
    req.on('error', reject);
    req.write(body);
    req.end();
  });
}

(async () => {
  console.log('=== 测试文件上传 ===\n');
  
  // 使用项目根目录的 PNG 文件
  const testFile = 'C:/Users/caoyg/ai/audio-tts/audio_codebuddy/page1-home.png';
  
  if (!fs.existsSync(testFile)) {
    console.log('❌ 测试文件不存在:', testFile);
    return;
  }
  
  console.log('测试文件:', testFile);
  console.log('文件大小:', fs.statSync(testFile).size, 'bytes\n');
  
  try {
    const result = await uploadFile(testFile);
    console.log('状态码:', result.status);
    console.log('响应:', JSON.stringify(result.data, null, 2));
    
    if (result.status === 200 && result.data.success) {
      console.log('\n✅ 上传成功！');
    } else {
      console.log('\n❌ 上传失败');
    }
  } catch (e) {
    console.error('❌ 请求失败:', e.message);
  }
})();
