import { App } from 'vue'
import { VXETable } from '../v-x-e-table'
import ExportPanelComponent from './src/export-panel'
import ImportPanelComponent from './src/import-panel'
import exportHook from './src/hook'
import { saveLocalFile as saveFile, readLocalFile as readFile, handlePrint } from './src/util'
import { dynamicApp } from '../dynamics'

import { PrintFunction } from '../../types/all'

export { saveFile, readFile }

export const print: PrintFunction = (options) => {
  const opts = Object.assign({}, options, {
    type: 'html'
  })
  handlePrint(null, opts, opts.content)
}

export const VxeModuleExport = {
  ExportPanel: ExportPanelComponent,
  ImportPanel: ImportPanelComponent,
  install (app: App) {
    VXETable.saveFile = saveFile
    VXETable.readFile = readFile
    VXETable.print = print
    VXETable.setup({
      export: {
        types: {
          csv: 0,
          html: 0,
          xml: 0,
          txt: 0
        }
      }
    })
    VXETable.hooks.add('$tableExport', exportHook)
    app.component(ExportPanelComponent.name, ExportPanelComponent)
    app.component(ImportPanelComponent.name, ImportPanelComponent)
  }
}

export const Export = VxeModuleExport

dynamicApp.component(ExportPanelComponent.name, ExportPanelComponent)
dynamicApp.component(ImportPanelComponent.name, ImportPanelComponent)

export default VxeModuleExport
