package com.yorvana

import com.yorvana.data.billing.DebugBillingOverride
import com.yorvana.data.billing.FakeBillingManager
import com.yorvana.data.preferences.AppPreferences
import com.yorvana.domain.AppGate
import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.TestScope

open class TestYorvanaApplication : YorvanaApplication() {
    val testScope = TestScope()

    override fun onCreate() {
        applicationScope = testScope
        super.onCreate()
    }

    override fun installCrashReporter() {
        // No-op for tests to avoid leaking uncaught exception handlers
    }

    override fun initDependencies() {
        preferences = mockk(relaxed = true)
        every { preferences.preferences } returns flowOf(AppPreferences())
        vaultStorage = mockk(relaxed = true)
        vehicleRepository = mockk(relaxed = true)
        recordRepository = mockk(relaxed = true)
        categoryRepository = mockk(relaxed = true)

        debugBillingOverride = DebugBillingOverride(preferences, applicationScope)
        billingManager = FakeBillingManager()
        appGate = AppGate(vehicleRepository, billingManager, applicationScope)
    }
}
