'use strict'
import { Module } from '../Module/index'
import { EventProvider } from '../Event'
import { ModuleManifest, ModuleConfig } from '../types'

interface AppOptions {
  modules: {
    [key: string]: ModuleManifest | (() => Promise<ModuleManifest>) | string
  }
}

class ApplicationProptey extends EventProvider {
  public modules: { [key: string]: Module } = {}
  public config!: ModuleConfig
  public readonly historyNodeLocation: number = history.length
  public routerRegExp: RegExp = /([^#\/]+)(.+)?/
  public options: AppOptions = {
    modules: {}
  }

  constructor () {
    super()
  }

  public setting (options: AppOptions) {
    this.options = options
  }
}

export {
  ApplicationProptey
}
