/****
 * 批量编译打包模板工具
 * 运行 npm run publish T_01 命令来打包T_01模板
 * 运行 npm run publish T_01,T_02,T_03,T_04  命令来分别打包 T_01,T_02,T_03,T_04 这四个模板，注意逗号要用英文的
 * 运行 npm run publish all 命令来打包所有模板
 */

const spawn = require('child_process').spawn;
const path = require("path");
const fs = require("fs");
const os = require('os');
const compressing = require("compressing");

//Linux系统上'Linux'
//macOS 系统上'Darwin'
//Windows系统上'Windows_NT'
let sysType = os.type();

Date.prototype.Format = function (fmt) {
  var o = {
    "M+": this.getMonth() + 1,
    "d+": this.getDate(),
    "h+": this.getHours(),
    "m+": this.getMinutes(),
    "s+": this.getSeconds(),
    "q+": Math.floor((this.getMonth() + 3) / 3),
    "S": this.getMilliseconds()
  };
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt))
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
}

function clean(zipPath) {
  if (fs.existsSync(zipPath)) {
    fs.unlinkSync(zipPath);
  }
}

const runSpawn = async function () {

  await new Promise(function (resolve, reject) {

    let pkg = require("../package.json");

    let ls;
    if (sysType === "Windows_NT") {
      //ng build --prod --build--optimizer --base-href /ng-one/
      ls = spawn("cmd.exe", ['/c', 'ng', 'build', '--prod', '--build--optimizer', '--base-href', '/template-base-href/']);
    } else {
      ls = spawn("ng", ['build', '--prod', '--build--optimizer', '--base-href', '/template-base-href/']);
    }

    ls.stdout.on('data', (data) => {
      console.log(` ${data}`);
    });

    ls.stderr.on('data', (data) => {
      console.log(`stderr: ${data}`);
      reject();
    });

    ls.on('close', (code) => {
      console.log(`child process exited with code ${code}`);
      //要压缩的目录
      let zippath = path.resolve(__dirname, "../dist", pkg.name);
      //压缩包的存放目录
      let date = new Date();
      // let zipname = pkg.name+"_"+date.Format("yyyyMMdd hh-mm-ss");
      let zipname = 'form';
      let zipdir = path.resolve(__dirname, "../publish/" + zipname + ".zip");
      clean(zipdir); //删除原有的包

      const tarStream = new compressing.zip.Stream();
      fs.readdir(zippath, function (err, files) {
        if (err) {
          console.log("======文件打开异常======");
          console.log(err);
          reject();
        }
        for (let i = 0; i < files.length; i++) {
          tarStream.addEntry(zippath + "/" + files[i]);
        }
        let writeStream = fs.createWriteStream(zipdir);
        tarStream.pipe(writeStream);
        writeStream.on('close', () => {
          console.log(`模板 ${pkg.name} 打包已完成！`);
          resolve();
        })
      });

    });

  });
}

// let projects = "";
// if(process.argv.length<3){
//   console.log("缺少参数");
//   return;
// }
// projects = process.argv[2];

let exec = async function () {
  //压缩模板
  await runSpawn();
}

exec();



