var System = require("../../../system")
const crypto = require('crypto');
var fs = require("fs");
var accesskey = 'DHmRtFlw2Zr3KaRwUFeiu7FWATnmla';
var accessKeyId = 'LTAIyAUK8AD04P5S';
var url = "https://gsb-zc.oss-cn-beijing.aliyuncs.com";
class UploadCtl {
  constructor() {
    this.cmdPdf2HtmlPattern = "docker run -i --rm -v /tmp/:/pdf 0c  pdf2htmlEX --zoom 1.3 '{fileName}'";
    this.restS = System.getObject("util.execClient");
    this.cmdInsertToFilePattern = "sed -i 's/id=\"page-container\"/id=\"page-container\" contenteditable=\"true\"/'";
    //sed -i  's/1111/&BBB/' /tmp/input.txt
    //sed 's/{position}/{content}/g' {path}
  }
  async getOssConfig() {
    var policyText = {
      "expiration": "2119-12-31T16:00:00.000Z",
      "conditions": [
        ["content-length-range", 0, 1048576000],
        ["starts-with", "$key", "zc"]
      ]
    };
    var b = new Buffer(JSON.stringify(policyText));
    var policyBase64 = b.toString('base64');
    var signature = crypto.createHmac('sha1', accesskey).update(policyBase64).digest().toString('base64'); //base64

    var data = {
      OSSAccessKeyId: accessKeyId,
      policy: policyBase64,
      Signature: signature,
      Bucket: 'gsb-zc',
      success_action_status: 201,
      url: url
    };

    return data;
  };
  async upfile(srckey, dest) {
    var oss = System.getObject("util.ossClient");
    var result = await oss.upfile(srckey, "/tmp/" + dest);
    return result;
  };
  async downfile(srckey) {
    var oss = System.getObject("util.ossClient");
    var downfile = await oss.downfile(srckey).then(function () {
      downfile = "/tmp/" + srckey;
      return downfile;
    });
    return downfile;
  };
  async pdf2html(obj) {
    var srckey = obj.key;
    var downfile = await this.downfile(srckey);
    var cmd = this.cmdPdf2HtmlPattern.replace(/\{fileName\}/g, srckey);
    var rtn = await this.restS.exec(cmd);
    var path = "/tmp/" + srckey.split(".pdf")[0] + ".html";
    var a = await this.insertToFile(path);
    fs.unlink("/tmp/" + srckey);
    var result = await this.upfile(srckey.split(".pdf")[0] + ".html", srckey.split(".pdf")[0] + ".html");
    return result.url;
  };
  async insertToFile(path) {
    var cmd = this.cmdInsertToFilePattern + " " + path;
    return await this.restS.exec(cmd);
  };

}
module.exports = UploadCtl;