package com.pixelized.desktop.lwa import com.pixelized.desktop.lwa.network.LwaClient import com.pixelized.desktop.lwa.network.LwaClientImpl import com.pixelized.desktop.lwa.repository.alteration.AlterationRepository import com.pixelized.desktop.lwa.repository.alteration.AlterationStore import com.pixelized.desktop.lwa.repository.campaign.CampaignRepository import com.pixelized.desktop.lwa.repository.campaign.CampaignStore import com.pixelized.desktop.lwa.repository.characterSheet.CharacterSheetRepository import com.pixelized.desktop.lwa.repository.characterSheet.CharacterSheetStore import com.pixelized.desktop.lwa.repository.network.NetworkRepository import com.pixelized.desktop.lwa.repository.roll_history.RollHistoryRepository import com.pixelized.desktop.lwa.repository.settings.SettingsFactory import com.pixelized.desktop.lwa.repository.settings.SettingsRepository import com.pixelized.desktop.lwa.repository.settings.SettingsStore import com.pixelized.desktop.lwa.ui.composable.character.characteristic.CharacterDetailCharacteristicDialogViewModel import com.pixelized.desktop.lwa.ui.composable.character.characteristic.CharacterSheetCharacteristicDialogFactory import com.pixelized.desktop.lwa.ui.screen.campaign.CampaignViewModel import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDetailFactory import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDetailViewModel import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.CharacterDiminishedViewModel import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.PlayerRibbonFactory import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.PlayerRibbonViewModel import com.pixelized.desktop.lwa.ui.screen.characterSheet.detail.CharacterSheetFactory import com.pixelized.desktop.lwa.ui.screen.characterSheet.detail.CharacterSheetViewModel import com.pixelized.desktop.lwa.ui.screen.characterSheet.edit.CharacterSheetEditFactory import com.pixelized.desktop.lwa.ui.screen.characterSheet.edit.CharacterSheetEditViewModel import com.pixelized.desktop.lwa.ui.screen.characterSheet.edit.common.SkillFieldFactory import com.pixelized.desktop.lwa.ui.screen.main.MainPageViewModel import com.pixelized.desktop.lwa.ui.screen.network.NetworkFactory import com.pixelized.desktop.lwa.ui.screen.network.NetworkViewModel import com.pixelized.desktop.lwa.ui.screen.roll.RollViewModel import com.pixelized.desktop.lwa.ui.screen.rollhistory.RollHistoryViewModel import com.pixelized.desktop.lwa.usecase.SettingsUseCase import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory import io.ktor.client.HttpClient import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.okhttp.OkHttp import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.plugins.websocket.WebSockets import io.ktor.serialization.kotlinx.json.json import org.koin.core.module.dsl.factoryOf import org.koin.core.module.dsl.singleOf import org.koin.core.module.dsl.viewModelOf import org.koin.dsl.module val appModuleDependencies get() = listOf( factoryDependencies, useCaseDependencies, storeDependencies, repositoryDependencies, viewModelDependencies, toolsDependencies, ) val toolsDependencies get() = module { single { OkHttp.create() } single { HttpClient( engine = get() ) { install(WebSockets) { pingIntervalMillis = 20_000 } install(ContentNegotiation) { json(get()) } } } single { LwaClientImpl(get(), get()) } } val storeDependencies get() = module { singleOf(::CharacterSheetStore) singleOf(::SettingsStore) singleOf(::AlterationStore) singleOf(::CampaignStore) } val repositoryDependencies get() = module { singleOf(::NetworkRepository) singleOf(::CharacterSheetRepository) singleOf(::RollHistoryRepository) singleOf(::SettingsRepository) singleOf(::AlterationRepository) singleOf(::CampaignRepository) } val factoryDependencies get() = module { factoryOf(::CharacterSheetFactory) factoryOf(::CharacterSheetEditFactory) factoryOf(::NetworkFactory) factoryOf(::SkillFieldFactory) factoryOf(::SettingsFactory) factoryOf(::CampaignJsonFactory) factoryOf(::PlayerRibbonFactory) factoryOf(::CharacterDetailFactory) factoryOf(::CharacterSheetCharacteristicDialogFactory) } val viewModelDependencies get() = module { viewModelOf(::CampaignViewModel) viewModelOf(::MainPageViewModel) viewModelOf(::CharacterSheetViewModel) viewModelOf(::CharacterSheetEditViewModel) viewModelOf(::RollViewModel) viewModelOf(::RollHistoryViewModel) viewModelOf(::NetworkViewModel) viewModelOf(::PlayerRibbonViewModel) viewModelOf(::CharacterDetailViewModel) viewModelOf(::CharacterDiminishedViewModel) viewModelOf(::CharacterDetailCharacteristicDialogViewModel) } val useCaseDependencies get() = module { factoryOf(::SettingsUseCase) }