package com.yorvana.ui.util

import com.yorvana.YorvanaApplication
import com.yorvana.data.billing.BillingManager
import com.yorvana.data.billing.DebugBillingOverride
import com.yorvana.data.preferences.AppPreferencesStore
import com.yorvana.data.repository.CategoryRepository
import com.yorvana.data.repository.RecordRepository
import com.yorvana.data.repository.VehicleRepository
import com.yorvana.data.storage.VaultStorage
import com.yorvana.domain.AppGate
import com.yorvana.util.SentryWrapper
import io.mockk.mockk

/**
 * Creates a [ViewModelDependencies] instance with mocked dependencies for testing.
 */
@Suppress("LongParameterList")
fun ViewModelDependencies.Companion.testInstance(
    app: YorvanaApplication = mockk(relaxed = true),
    appGate: AppGate = mockk(relaxed = true),
    vehicleRepository: VehicleRepository = mockk(relaxed = true),
    recordRepository: RecordRepository = mockk(relaxed = true),
    categoryRepository: CategoryRepository = mockk(relaxed = true),
    vaultStorage: VaultStorage = mockk(relaxed = true),
    preferences: AppPreferencesStore = mockk(relaxed = true),
    billingManager: BillingManager = mockk(relaxed = true),
    debugBillingOverride: DebugBillingOverride? = null,
    sentryWrapper: SentryWrapper = mockk(relaxed = true),
): ViewModelDependencies =
    ViewModelDependencies(
        app = app,
        appGate = appGate,
        vehicleRepository = vehicleRepository,
        recordRepository = recordRepository,
        categoryRepository = categoryRepository,
        vaultStorage = vaultStorage,
        preferences = preferences,
        billingManager = billingManager,
        debugBillingOverride = debugBillingOverride,
        sentryWrapper = sentryWrapper,
    )
