export default (configuration) => {
  //TODO: what I need to load
  return `
package ${configuration.packageName}.di

import ${configuration.packageName}.viewmodels.*
import ${configuration.packageName}.data.local.AppPreferences
import ${configuration.packageName}.network.RemoteDataSource
import ${configuration.packageName}.network.provideApi
import ${configuration.packageName}.network.provideRetrofit
import ${configuration.packageName}.repositories.APIRepository
import org.koin.android.ext.koin.androidApplication
import org.koin.android.ext.koin.androidContext
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.core.module.Module
import org.koin.dsl.module

val dbModule: Module = module {

}

val prefModule = module {
    single { AppPreferences(androidContext()) }
}

val networkModule = module {
    single { provideRetrofit(androidApplication()) }
    factory { provideApi(get()) }
}

val remoteDataSourceModule = module {
    factory { RemoteDataSource(get()) }
}

val repoModules: Module = module {
    single { APIRepository(get()) }
}

val viewModules: Module = module {
    viewModel { BaasViewModel(get()) }
    ${ configuration.isInappPurchase ? `viewModel { BillingViewModel(get()) }` : ""}
}

val koinModules = listOf(
    prefModule, networkModule, remoteDataSourceModule, viewModules, dbModule, repoModules
)

  `;
};

