/**
 * Module for working with COM objects
 *
 * Usage sample:
 *
       const wdExportFormatPDF = 17 // PDF
       const COM = require('@unitybase/com-bridge')
       const path = require('path')
       const fullTestFilePath = path.join(__dirname, 'test-doc.docx')
       const fullPDFFilePath = path.join(__dirname, 'test-doc.pdf')

       const fs = require('fs')

       if (fs.existsSync(fullPDFFilePath)) fs.unlinkSync(fullPDFFilePath)

       let word = COM.createCOMObject('Word.Application')
       word.DisplayAlerts = 0
       word.CheckLanguage = false
       word.Options.CheckSpellingAsYouType = false

       // pass a unnamed parameter
       let doc = word.Documents.Open(fullTestFilePath)

       // pass a named parameters
       doc.ExportAsFixedFormat({
         ExportFormat: wdExportFormatPDF,
         OutputFileName: fullPDFFilePath
       })
       doc.close({SaveChanges: false})
       doc = null
       word.Quit()
       word = null
 *
 * @module @unitybase/com-bridge
 */

const dllName = 'ubcombridge.dll'
const archPath = process.arch === 'x32' ? './bin/x32' : './bin/x86_64'
const path = require('path')
const moduleName = path.join(__dirname, archPath, dllName)
const binding = require(moduleName)
/**
 * Create JavaScript wrapper around a COM/OLE object. COM must implement IDispatch interface.
 *
 * Returning object has the same properties and methods as in original COM object.
 *
 * Names of methods and properties are **case-insensitive**. If COM object has get-properties with parameters
 * they implemented as a functions in JS-object.
 *
 * Method can take unnamed parameters(normal usage), you must use the correct order of the parameters,
 * or named parameters(in this case functioin take a {Object} with keys = parameter name and values is a parameter values)
 *
 * @param {String} objectName
 * @return {Object}
 */
module.exports.createCOMObject = binding.createCOMObject