package it.integry.integrywmsnative;

import javax.inject.Singleton;

import dagger.Component;
import it.integry.integrywmsnative.core.context.AppContext;
import it.integry.integrywmsnative.core.data_store.db.RoomModule;
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneComponent;
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneModule;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingComponent;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleComponent;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleModule;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliComponent;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliModule;
import it.integry.integrywmsnative.gest.main.MainActivityComponent;
import it.integry.integrywmsnative.gest.main.MainActivityModule;
import it.integry.integrywmsnative.gest.main.MainFragmentComponent;
import it.integry.integrywmsnative.gest.main.MainFragmentModule;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoComponent;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoModule;
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoComponent;
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoModule;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoComponent;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaModule;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeComponent;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeModule;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComponent;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteModule;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArtsComponent;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArtsModule;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotComponent;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdComponent;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUComponent;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUModule;

// Definition of the Application graph
@Singleton
@Component(modules = {
        RoomModule.class,
        SplashActivityModule.class,
        MainApplicationModule.class,
        MainActivityModule.class,
        MainFragmentModule.class,
        MainAccettazioneModule.class,
        ListaBancaliModule.class,
        ContenutoBancaleModule.class,
        PVOrdiniAcquistoGrigliaModule.class,
        PVOrdineAcquistoEditModule.class,
        PickingLiberoModule.class,
        RettificaGiacenzeModule.class,
        SpedizioneModule.class,
        AccettazionePickingModule.class,
        UltimeConsegneClienteModule.class,
        UltimiArriviFornitoreModule.class,
        PickingResiModule.class,
        OrdiniUscitaElencoModule.class,
        DialogInputQuantityV2Module.class,
        DialogInputLUProdModule.class,
        DialogScanArtModule.class,
        DialogScanOrCreateLUModule.class,
        ProdFabbisognoLineeProdModule.class,
        VersamentoMerceModule.class,
        DialogAskMagazzinoProssimitaModule.class,
        DialogChooseBatchLotModule.class,
        DialogRowInfoProdFabbisognoLineeProdModule.class,
        ProdOrdineProduzioneElencoModule.class,
        ProdRecuperoMaterialeModule.class,
        ProdVersamentoMaterialeModule.class,
        DialogChooseArtsFromListaArtsModule.class
})
public interface MainApplicationComponent {

    SplashActivityComponent.Factory splashActivityComponent();
    MainActivityComponent.Factory mainActivityComponent();
    MainFragmentComponent.Factory mainFragmentComponent();
    MainAccettazioneComponent.Factory mainAccettazioneComponent();
    ListaBancaliComponent.Factory listaBancaliComponent();
    ContenutoBancaleComponent.Factory contenutoBancaleComponent();
    PVOrdiniAcquistoGrigliaComponent.Factory pvOrdineAcquistoGrigliaComponent();
    PVOrdineAcquistoEditComponent.Factory pvOrdineAcquistoEditComponent();
    PickingLiberoComponent.Factory pickingLiberoComponent();
    RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
    SpedizioneComponent.Factory spedizioneComponent();
    AccettazionePickingComponent.Factory accettazionePickingComponent();
    UltimeConsegneClienteComponent.Factory ultimeConsegneClienteComponent();
    UltimiArriviFornitoreComponent.Factory ultimiArriviFornitoreComponent();
    PickingResiComponent.Factory pickingResiComponent();
    OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent();
    DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
    DialogInputLUProdComponent.Factory dialogInputLUProdComponent();
    DialogScanArtComponent.Factory dialogScanArtComponent();
    DialogScanOrCreateLUComponent.Factory dialogScanOrCreateLUComponent();
    ProdFabbisognoLineeProdComponent.Factory prodFabbisognoLineeProdComponent();
    VersamentoMerceComponent.Factory versamentoMerceComponent();
    DialogAskMagazzinoProssimitaComponent.Factory dialogAskMagazzinoProssimitaComponent();
    DialogChooseBatchLotComponent.Factory dialogChooseBatchLotComponent();
    DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();
    ProdRientroMerceComponent.Factory prodRientroMerceComponent();
    ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent();
    ProdOrdineProduzioneElencoComponent.Factory prodOrdineProduzioneElencoComponent();
    ProdRecuperoMaterialeComponent.Factory prodRecuperoMaterialeComponent();
    ProdVersamentoMaterialeComponent.Factory prodVersamentoMaterialeComponent();
    DialogChooseArtsFromListaArtsComponent.Factory dialogChooseArtsFromListaArtsComponent();


    void inject(MainApplication mainApplication);
    void inject(AppContext mainApplication);

}
