DatabaseManagerFactory.kt

package chat.rocket.android.db

import android.app.Application
import chat.rocket.android.server.domain.TokenRepository
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class DatabaseManagerFactory @Inject constructor(
    private val context: Application,
    private val tokenRepository: TokenRepository
) {
    private val cache = HashMap<String, DatabaseManager>()

    fun create(serverUrl: String): DatabaseManager? {
        cache[serverUrl]?.let {
            Timber.d("Returning cached database for $serverUrl")
            return it
        }

        tokenRepository.get(serverUrl)?.let { token ->
            DatabaseManager(context, serverUrl, token).apply {
                cache[serverUrl] = this
                Timber.d("Returning fresh database for $serverUrl")
                return this
            }
        }

        return null
    }
}