// cli.js,创建于根目录，与命令配置的./cli.js保持一致
const path = require("path");
const fs = require('fs');
const { NodeSSH } = require('node-ssh');

sshPublish();
async function sshPublish() {
  let privateKeyPath = '';

  const publishDir = '/www/server/nginx/html/deepdragon';
  let remoteConfig = undefined;

  privateKeyPath = '';
  remoteConfig = {
    host: '119.3.156.115',
    username: 'root',
    password: 'Jsld.0813',
    port: 22,
    readyTimeout: 5000000
  }
  // 初始化ssh
  const ssh = new NodeSSH();
  // 连接 服务器

  await connect(ssh, remoteConfig, privateKeyPath);
  console.log('连接成功');
  console.log('开始文件上传!');
  // 上传目录到服务器
  await uploadDir(ssh, '/dist', publishDir);
  console.log('文件上传成功!');
  // 执行exit命令

  const { stdout, stderr, code, signal } = await ssh.execCommand('exit');
  ssh.dispose();
}

function connect(ssh, remoteConfig, privateKeyPath) {
  return ssh.connect({
    host: remoteConfig.host,
    username: remoteConfig.username,
    password: remoteConfig.password,
    port: remoteConfig.port,
    tryKeyboard: true,
    // privateKey: fs.readFileSync(path.join(__dirname, privateKeyPath)).toString(),
    // privateKey: path.join(__dirname, privateKeyPath),
    onKeyboardInteractive: (name, instructions, instructionsLang, prompts, finish) => {
    }
  });
}
function uploadDir(ssh, localDir, publishDir) {
  return ssh.putDirectory(path.join(__dirname, localDir), publishDir, {
    recursive: true,
    concurrency: 10,
    // ^ WARNING: Not all servers support high concurrency
    // try a bunch of values and see what works on your server
    validate: function (itemPath) {
      const baseName = path.basename(itemPath)
      return baseName.substr(0, 1) !== '.' && // do not allow dot files
        baseName !== 'node_modules' // do not allow node_modules
    },
    tick: function (localPath, remotePath, error) {
      if(error){
        console.log(localPath, remotePath, error || '');
      } else{
        console.log(localPath+'：成功上传');
      }

    }
  });
}
