var system=require("../../../system")
const CtlBase = require("../../ctl.base");
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 extends CtlBase{
  constructor(){
    super("common",CtlBase.getServiceName(UploadCtl));
    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;
