package com.optix.android.di

import com.optix.android.data.repository.AuditLogRepositoryImpl
import com.optix.android.data.repository.SessionRepositoryImpl
import com.optix.android.data.repository.NodeRepositoryImpl
import com.optix.android.data.repository.SettingsRepositoryImpl
import com.optix.android.data.repository.ToolRepositoryImpl
import com.optix.android.data.repository.WorkflowRepositoryImpl
import com.optix.android.domain.repository.AuditLogRepository
import com.optix.android.domain.repository.NodeRepository
import com.optix.android.domain.repository.SessionRepository
import com.optix.android.domain.repository.SettingsRepository
import com.optix.android.domain.repository.ToolRepository
import com.optix.android.domain.repository.WorkflowRepository
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
abstract class RepositoryModule {

    @Binds @Singleton
    abstract fun bindAuditLogRepository(impl: AuditLogRepositoryImpl): AuditLogRepository

    @Binds @Singleton
    abstract fun bindToolRepository(impl: ToolRepositoryImpl): ToolRepository

    @Binds @Singleton
    abstract fun bindSessionRepository(impl: SessionRepositoryImpl): SessionRepository

    @Binds @Singleton
    abstract fun bindNodeRepository(impl: NodeRepositoryImpl): NodeRepository

    @Binds @Singleton
    abstract fun bindSettingsRepository(impl: SettingsRepositoryImpl): SettingsRepository

    @Binds @Singleton
    abstract fun bindWorkflowRepository(impl: WorkflowRepositoryImpl): WorkflowRepository
}
