package com.gamedog.vididin.di

import com.gamedog.vididin.features.benefit.BenefitRouter
import com.gamedog.vididin.features.benefit.DefaultBenefitRouter
import com.gamedog.vididin.features.winrecords.DefaultWinRecordRouter
import com.gamedog.vididin.features.winrecords.WinRecordRouter
import com.gamedog.vididin.features.withdraw.DefaultWithdrawRouter
import com.gamedog.vididin.features.withdraw.DefaultWithdrawSubRouter
import com.gamedog.vididin.features.withdraw.WithdrawRouter
import com.gamedog.vididin.features.withdraw.WithdrawSubRouter
import com.gamedog.vididin.features.zero.DefaultZeroBuyRouter
import com.gamedog.vididin.features.zero.ZeroBuyRouter
import com.gamedog.vididin.router.DefaultFeedbackRouter
import com.gamedog.vididin.router.DefaultGameRouter
import com.gamedog.vididin.router.DefaultMainRouter
import com.gamedog.vididin.router.DefaultPrivacyRouter
import com.gamedog.vididin.router.DefaultSplashRouter
import com.gamedog.vididin.router.DefaultVersionRouter
import com.gamedog.vididin.router.DefaultWatchAdRouter
import com.gamedog.vididin.router.DefaultWithdrawRecordRouter
import com.gamedog.vididin.router.IRouterFeedback
import com.gamedog.vididin.router.IRouterGame
import com.gamedog.vididin.router.IRouterPrivacy
import com.gamedog.vididin.router.IRouterSplash
import com.gamedog.vididin.router.IRouterVersion
import com.gamedog.vididin.router.IRouterWithdrawRecord
import com.gamedog.vididin.router.IRouterWatchAd
import com.gamedog.vididin.router.MainRouter
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object BenefitModule {

    @Provides
    @Singleton
    fun provideRouter(): BenefitRouter = DefaultBenefitRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object ZeroBuyModule {

    @Provides
    @Singleton
    fun provideRouter(): ZeroBuyRouter = DefaultZeroBuyRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object WithdrawModule {

    @Provides
    @Singleton
    fun provideRouter(): WithdrawRouter = DefaultWithdrawRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object WithdrawSubModule {

    @Provides
    @Singleton
    fun provideRouter(): WithdrawSubRouter = DefaultWithdrawSubRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object WinRecordModule {
    @Provides
    @Singleton
    fun provideRouter(): WinRecordRouter = DefaultWinRecordRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object MainModule {
    @Provides
    @Singleton
    fun provideRouter(): MainRouter = DefaultMainRouter()
}


@Module
@InstallIn(SingletonComponent::class)
object PrivacyModule {
    @Provides
    @Singleton
    fun provideRouter(): IRouterPrivacy = DefaultPrivacyRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object PrivacyGame {
    @Provides
    @Singleton
    fun provideRouter(): IRouterGame = DefaultGameRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object FeedbackModule {
    @Provides
    @Singleton
    fun provideRouter(): IRouterFeedback = DefaultFeedbackRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object WithdrawRecordModule {
    @Provides
    @Singleton
    fun provideRouter(): IRouterWithdrawRecord = DefaultWithdrawRecordRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object SplashModule {
    @Provides
    @Singleton
    fun provideRouter(): IRouterSplash = DefaultSplashRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object VersionModule {
    @Provides
    @Singleton
    fun provideRouter(): IRouterVersion = DefaultVersionRouter()
}

@Module
@InstallIn(SingletonComponent::class)
object WatchAd {
    @Provides
    @Singleton
    fun provideRouter(): IRouterWatchAd = DefaultWatchAdRouter()
}