import SftpClient from 'ssh2-sftp-client';
import path from 'path';
import fs from 'fs/promises'; // 使用 fs 的 Promise 版本
import { fileURLToPath } from 'url';

// 如果使用环境变量，取消下面这行的注释
// require('dotenv').config();
// 获取当前模块的文件路径
const __filename = fileURLToPath(import.meta.url);
// 获取当前模块所在的目录路径
const __dirname = path.dirname(__filename);
const config = {
  // 如果使用环境变量
  // host: process.env.SFTP_HOST,
  // port: parseInt(process.env.SFTP_PORT) || 22,
  // username: process.env.SFTP_USER,
  // password: process.env.SFTP_PASS,

  // 直接配置
  host: '36.103.203.89',
  port: 22,
  username: 'liuyang',
  password: 'Asdf!234',
  // 或者使用私钥认证
  // privateKey: fs.readFileSync('/path/to/your/key')
};

// 本地打包目录
const localDir = path.join(__dirname, 'dist');
// 服务器目标目录
// const remoteDir = process.env.SFTP_REMOTE_DIR; // 如果使用环境变量
const remoteDir = '/home/ubuntu/mnt/Teacher_Evaluation/nginx/dist';

async function uploadToServer() {
  const sftp = new SftpClient();
  try {
    console.log('开始连接服务器...');
    await sftp.connect(config);

    console.log('连接成功，检查远程目录是否存在...');
    const exists = await sftp.exists(remoteDir);

    if (exists) {
      console.log('清空远程目录中的内容...');
      // 获取远程目录中的所有文件和文件夹
      const remoteList = await sftp.list(remoteDir);

      // 依次删除每个文件和文件夹
      for (const item of remoteList) {
        const remotePath = `${remoteDir}/${item.name}`;
        if (item.type === 'd') {
          // 如果是目录，递归删除
          await sftp.rmdir(remotePath, true);
        } else {
          // 如果是文件，直接删除
          await sftp.delete(remotePath);
        }
      }
    } else {
      console.log('远程目录不存在，创建目录...');
      await sftp.mkdir(remoteDir, true);
    }

    console.log('开始上传文件...');
    await sftp.uploadDir(localDir, remoteDir);

    console.log('文件上传完成!');
    return true;
  } catch (err) {
    console.error('上传过程中发生错误:', err);
    return false;
  } finally {
    sftp.end();
  }
}

uploadToServer();
