var excel = require('exceljs');
const system=require("../system");
const uuidv4 = require('uuid/v4');
const fs=require("fs");

class ExcelClient {
    constructor() {
      this.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
      this.ossClient=system.getObject("util.ossClient");
      this.filedownloadDao = system.getObject("db.filedownloadDao");
    }

    async download(params) {
      var self = this;

      var title = params.title || "";
      var code = params.code || uuidv4();
      var fileName = params.fileName || code + ".xlsx";
      var filePath = params.filePath || "/tmp/" + fileName;
      var rows = params.rows || [];
      var user = params.user || {};

      var wb = new excel.Workbook();
      wb.properties.date1904 = true;
      var sheet = wb.addWorksheet("sheet1");
      var headers = rows[0];
      console.log(headers, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2 headers");
      if(title) {
        sheet.addRow([title]);
        sheet.getCell("A1").font = {
          name: '微软雅黑',
          family: 4,
          size: 12,
          bold: true
        };
        sheet.getCell('A1').alignment = { vertical: 'middle', horizontal: 'center' };

        var colkey = 0;
        if(headers.length > 0) {
          colkey = headers.length - 1;
        }
        var endColumn = this.columns[colkey] || "A";
        sheet.mergeCells("A1:" + endColumn + "1");
      }

      for(var r of rows) {
        sheet.addRow(r);
      }

      wb.xlsx.writeFile(filePath).then(async function(d) {
          var rtn = await self.ossClient.upfile(fileName, filePath);
          fs.unlink(filePath,function(err){});
          var obj = {
            user_id : user.id || 0,
            userName : user.userName || "",
            code : code,
            fileName : fileName,
            filePath : rtn.url || "",
            isDownload : false,
          }
          var obj = await self.filedownloadDao.create(obj);
      });
    }
}

module.exports = ExcelClient;
