const { initialiseData, setupDatastore } = require("@budibase/core")
const getDatabaseManager = require("../utilities/databaseManager")
const { applictionVersionPackage } = require("../utilities/createAppPackage")
const { determineVersionId } = require("../utilities/runtimePackages")

module.exports = async (context, datastoreModule, app, instance) => {
  try {
    const databaseManager = getDatabaseManager(
      datastoreModule,
      context.config.datastoreConfig
    )

    await databaseManager.createEmptyInstanceDb(app.id, instance.id)

    const dbConfig = databaseManager.getInstanceDatastoreConfig(
      app.id,
      instance.id
    )

    const datastore = setupDatastore(datastoreModule.getDatastore(dbConfig))

    const versionId = determineVersionId(instance.version)

    const appPackage = await applictionVersionPackage(
      context,
      app.name,
      versionId,
      instance.key
    )

    await initialiseData(
      datastore,
      appPackage.appDefinition,
      appPackage.accessLevels
    )

    return dbConfig
  } catch (e) {
    throw e
  }
}