/**
 * 插入到excel中
 * @param {Array} data - 插入的数据，必须是一个二纬矩阵
 * @param {string} [targetAddress] - 插入数据的位置
 * @param {boolean} [exchange] - 是否矩阵交换
 * @return {null}
 * */
import RequestContext = Excel.RequestContext;
import Range = Excel.Range;
import Worksheet = Excel.Worksheet;

export declare interface Matrix extends Array<Array<any>> {
}

// 增加一个报错抛出
/**
 * @param {Matrix} data - 插入的数据
 * @param {string} targetAddress - 插入的地址
 * */
export default function (data: Matrix, targetAddress: string) {
  // 检测是否为空 如果为空则不进行任何操作
  // if (data.length === 0 || (data.length === 1 && data[0].length === 0)) return null

  let yLength = data.length
  let xLength = data[0].length

  Excel.run((ctx: RequestContext) => {

    let workbook = ctx.workbook
    let range: Range

    // 预防没有给出address的情况
    if (!targetAddress) {
      let range: Range = workbook.getSelectedRange()
      range.load('address')
    } else {
      let worksheet: Worksheet = ctx.workbook.worksheets.getActiveWorksheet()
      range = worksheet.getRange(targetAddress)
    }

    range.load('address')

    return ctx.sync()
      .then(() => {
        // 获取sheet 和 address
        let [sheet, address] = range.address.split('!')
        let targetWorksheet: Worksheet = workbook.worksheets.getItem(sheet)
        targetWorksheet.activate()
        range = targetWorksheet.getRange(address)

        range = range.getCell(0, 0) // 获取最左上角的cell
        range = range.getResizedRange(yLength - 1, xLength - 1) // 变换大小为目标矩阵大小
        range.select() // 在excel中选中
        range.values = data
        return ctx.sync()
      })
  })
}
