// Path: app/src/main/java/pl/srw/billcalculator/bill/di/PgeBillComponent.java
// @RetainActivityScope
// @Subcomponent
// public interface PgeBillComponent extends MvpComponent<PgeBillActivity> {
// }
// 
// Path: app/src/main/java/pl/srw/billcalculator/bill/di/PgnigBillComponent.java
// @RetainActivityScope
// @Subcomponent
// public interface PgnigBillComponent extends MvpComponent<PgnigBillActivity> {
// }
// 
// Path: app/src/main/java/pl/srw/billcalculator/bill/di/TauronBillComponent.java
// @RetainActivityScope
// @Subcomponent
// public interface TauronBillComponent extends MvpComponent<TauronBillActivity> {
// }
// 
// Path: app/src/main/java/pl/srw/billcalculator/data/ApplicationRepo.java
// @Singleton
// public class ApplicationRepo {
// 
//     private static final String PREFERENCE_KEY_FIRST_LAUNCH = "first_launch";
//     private static final String PREFERENCE_KEY_HELP_SHOWN = "help_shown";
//     private final SharedPreferences prefs;
// 
//     @Inject
//     ApplicationRepo(@Named(GLOBAL_SHARED_PREFS) SharedPreferences prefs) {
//         this.prefs = prefs;
//     }
// 
//     public boolean isFirstLaunch() {
//         return prefs.getString(PREFERENCE_KEY_FIRST_LAUNCH, "").isEmpty();
//     }
// 
//     public void markFirstLaunch() {
//         prefs.edit().putString(PREFERENCE_KEY_FIRST_LAUNCH, new Date().toString()).apply();
//     }
// 
//     public boolean wasHelpShown() {
//         return prefs.contains(PREFERENCE_KEY_HELP_SHOWN);
//     }
// 
//     public void markHelpShown() {
//         prefs.edit().putBoolean(PREFERENCE_KEY_HELP_SHOWN, true).apply();
//     }
// }
// 
// Path: app/src/main/java/pl/srw/billcalculator/history/di/HistoryComponent.java
// @RetainActivityScope
// @Subcomponent(modules = HistoryModule.class)
// public interface HistoryComponent extends MvpComponent<DrawerActivity> {
// 
//     FormComponent getFormComponent();
// 
//     void inject(CheckPricesDialogFragment dialogFragment);
// 
//     void inject(NewUIDialogFragment dialogFragment);
// }


import android.content.Context;
import android.support.annotation.NonNull;
import javax.inject.Singleton;
import dagger.Component;
import pl.srw.billcalculator.BillCalculator;
import pl.srw.billcalculator.bill.di.PgeBillComponent;
import pl.srw.billcalculator.bill.di.PgnigBillComponent;
import pl.srw.billcalculator.bill.di.TauronBillComponent;
import pl.srw.billcalculator.data.ApplicationRepo;
import pl.srw.billcalculator.data.bill.HistoryRepo;
import pl.srw.billcalculator.data.settings.prices.PricesRepo;
import pl.srw.billcalculator.history.di.HistoryComponent;
import pl.srw.billcalculator.settings.di.SettingsComponent;
import pl.srw.billcalculator.settings.prices.PgePrices;
import pl.srw.billcalculator.util.BillSelection;
package pl.srw.billcalculator.di;




@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {

    @NonNull HistoryComponent getHistoryComponent();

    @NonNull SettingsComponent getSettingsComponent();

    @NonNull PgeBillComponent getPgeBillComponent();

    @NonNull PgnigBillComponent getPgnigBillComponent();

    @NonNull TauronBillComponent getTauronBillComponent();

    void inject(BillCalculator application);

    // Visible for UI tests
    @NonNull PgePrices getPgePrices();

    @NonNull ApplicationRepo getApplicationRepo();

    @NonNull BillSelection getBillSelection();

    @NonNull PricesRepo getPricesRepo();

// Path: app/src/main/java/pl/srw/billcalculator/bill/di/PgeBillComponent.java
// @RetainActivityScope
// @Subcomponent
// public interface PgeBillComponent extends MvpComponent<PgeBillActivity> {
// }
// 
// Path: app/src/main/java/pl/srw/billcalculator/bill/di/PgnigBillComponent.java
// @RetainActivityScope
// @Subcomponent
// public interface PgnigBillComponent extends MvpComponent<PgnigBillActivity> {
// }
// 
// Path: app/src/main/java/pl/srw/billcalculator/bill/di/TauronBillComponent.java
// @RetainActivityScope
// @Subcomponent
// public interface TauronBillComponent extends MvpComponent<TauronBillActivity> {
// }
// 
// Path: app/src/main/java/pl/srw/billcalculator/data/ApplicationRepo.java
// @Singleton
// public class ApplicationRepo {
// 
//     private static final String PREFERENCE_KEY_FIRST_LAUNCH = "first_launch";
//     private static final String PREFERENCE_KEY_HELP_SHOWN = "help_shown";
//     private final SharedPreferences prefs;
// 
//     @Inject
//     ApplicationRepo(@Named(GLOBAL_SHARED_PREFS) SharedPreferences prefs) {
//         this.prefs = prefs;
//     }
// 
//     public boolean isFirstLaunch() {
//         return prefs.getString(PREFERENCE_KEY_FIRST_LAUNCH, "").isEmpty();
//     }
// 
//     public void markFirstLaunch() {
//         prefs.edit().putString(PREFERENCE_KEY_FIRST_LAUNCH, new Date().toString()).apply();
//     }
// 
//     public boolean wasHelpShown() {
//         return prefs.contains(PREFERENCE_KEY_HELP_SHOWN);
//     }
// 
//     public void markHelpShown() {
//         prefs.edit().putBoolean(PREFERENCE_KEY_HELP_SHOWN, true).apply();
//     }
// }
// 
// Path: app/src/main/java/pl/srw/billcalculator/history/di/HistoryComponent.java
// @RetainActivityScope
// @Subcomponent(modules = HistoryModule.class)
// public interface HistoryComponent extends MvpComponent<DrawerActivity> {
// 
//     FormComponent getFormComponent();
// 
//     void inject(CheckPricesDialogFragment dialogFragment);
// 
//     void inject(NewUIDialogFragment dialogFragment);
// }


// Path: app/src/main/java/pl/srw/billcalculator/di/ApplicationComponent.java
import android.content.Context;
import android.support.annotation.NonNull;
import javax.inject.Singleton;
import dagger.Component;
import pl.srw.billcalculator.BillCalculator;
import pl.srw.billcalculator.bill.di.PgeBillComponent;
import pl.srw.billcalculator.bill.di.PgnigBillComponent;
import pl.srw.billcalculator.bill.di.TauronBillComponent;
import pl.srw.billcalculator.data.ApplicationRepo;
import pl.srw.billcalculator.data.bill.HistoryRepo;
import pl.srw.billcalculator.data.settings.prices.PricesRepo;
import pl.srw.billcalculator.history.di.HistoryComponent;
import pl.srw.billcalculator.settings.di.SettingsComponent;
import pl.srw.billcalculator.settings.prices.PgePrices;
import pl.srw.billcalculator.util.BillSelection;

package pl.srw.billcalculator.di;




@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {

    @NonNull HistoryComponent getHistoryComponent();

    @NonNull SettingsComponent getSettingsComponent();

    @NonNull PgeBillComponent getPgeBillComponent();

    @NonNull PgnigBillComponent getPgnigBillComponent();

    @NonNull TauronBillComponent getTauronBillComponent();

    void inject(BillCalculator application);

    // Visible for UI tests
    @NonNull PgePrices getPgePrices();

    @NonNull ApplicationRepo getApplicationRepo();

    @NonNull BillSelection getBillSelection();

    @NonNull PricesRepo getPricesRepo();

    @NonNull HistoryRepo getHistoryRepo();