package dev.stave.di
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dev.stave.data.SettingsStore
import dev.stave.domain.renderer.Renderer
import dev.stave.playback.LocalRenderer
import dev.stave.upnp.UpnpServiceHolder
import dev.stave.upnp.renderer.EarhornRendererService
import dev.stave.upnp.renderer.RendererCoordinator
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object RendererModule {
/** UI talks to the coordinator; it delegates to local or a remote UPnP renderer
* based on [SettingsStore.activeRendererUdn]. */
@Provides
@Singleton
fun provideRenderer(
localRenderer: LocalRenderer,
holder: UpnpServiceHolder,
settings: SettingsStore,
): Renderer = RendererCoordinator(localRenderer, holder, settings)
/** Exposes this device as a UPnP MediaRenderer on the LAN when the user
* toggles rendererBroadcastEnabled. Drives the LOCAL renderer — remote
* control points play through this device's speakers. */
@Provides
@Singleton
fun provideEarhornRendererService(
@dagger.hilt.android.qualifiers.ApplicationContext context: android.content.Context,
holder: UpnpServiceHolder,
localRenderer: LocalRenderer,
settings: SettingsStore,
): EarhornRendererService = EarhornRendererService(holder, localRenderer, settings) {
runCatching { context.packageManager.getPackageInfo(context.packageName, 0).versionName ?: "unknown" }
.getOrDefault("unknown")
}
}