// Path: databoundary/src/main/java/eu/rampsoftware/er/data/CurrencyRepository.java
// public interface CurrencyRepository {
// 
//     Observable<CurrencyData> getCurrencies(final Date date);
// 
//     Observable<SingleValue> getSeries(Date from, Date to, String currencyCode);
// }
// 
// Path: databoundary/src/main/java/eu/rampsoftware/er/data/PreferencesData.java
// public interface PreferencesData {
//     void setCurrenciesExchangeDate(Date date);
//     Optional<Date> getCurrenciesExchangeDate();
// }
// 
// Path: data/src/main/java/eu/rampsoftware/er/data/datasource/CurrencyDataSource.java
// public interface CurrencyDataSource {
// 
//     Observable<CurrencyData> getCurrencies(Date date);
// 
//     boolean containsCurrencyValue(Date date, String currencyCode);
// 
//     boolean containsCurrencyValues(Date date);
// 
//     Observable<SingleValue> getCurrencyValues(Date startDate, Date endDate, String currencyCode);
// 
//     void storeCurrencies(CurrencyData currencyData);
// }
// 
// Path: data/src/main/java/eu/rampsoftware/er/data/datasource/remote/CurrencyDataApi.java
// public interface CurrencyDataApi {
// 
//     @GET("/historical/{date}.json")
//     Observable<Response<CurrencyList>> getCurrencies(@Path("date") String date,
//                                                      @Query("app_id") String appId);
// }
// 
// Path: presentation/src/main/java/eu/rampsoftware/er/properties/ApplicationProperties.java
// public interface ApplicationProperties {
//     String baseUrl();
// 
//     boolean logsEnabled();
// 
//     String getOerAppId();
// 
//     String sharedPreferencesName();
// }


import android.content.Context;
import javax.inject.Named;
import eu.rampsoftware.er.data.CurrencyRepository;
import eu.rampsoftware.er.data.PreferencesData;
import eu.rampsoftware.er.data.datasource.CurrencyDataSource;
import eu.rampsoftware.er.data.datasource.remote.CurrencyDataApi;
import eu.rampsoftware.er.properties.ApplicationProperties;
package eu.rampsoftware.er.di;




interface IApplicationModule {
    String provideExampleString();

    Context provideContext();

    ApplicationProperties provideApplicationProperties(Context context);

    CurrencyDataSource provideRemoteCurrencyDataSource(ApplicationProperties properties, CurrencyDataApi currencyDataApi);

    CurrencyDataSource provideLocalCurrencyDataSource();

    CurrencyRepository provideCurrencyRepository(@Named("local") CurrencyDataSource localSource,
                                                 @Named("remote") CurrencyDataSource remoteSource);

// Path: databoundary/src/main/java/eu/rampsoftware/er/data/CurrencyRepository.java
// public interface CurrencyRepository {
// 
//     Observable<CurrencyData> getCurrencies(final Date date);
// 
//     Observable<SingleValue> getSeries(Date from, Date to, String currencyCode);
// }
// 
// Path: databoundary/src/main/java/eu/rampsoftware/er/data/PreferencesData.java
// public interface PreferencesData {
//     void setCurrenciesExchangeDate(Date date);
//     Optional<Date> getCurrenciesExchangeDate();
// }
// 
// Path: data/src/main/java/eu/rampsoftware/er/data/datasource/CurrencyDataSource.java
// public interface CurrencyDataSource {
// 
//     Observable<CurrencyData> getCurrencies(Date date);
// 
//     boolean containsCurrencyValue(Date date, String currencyCode);
// 
//     boolean containsCurrencyValues(Date date);
// 
//     Observable<SingleValue> getCurrencyValues(Date startDate, Date endDate, String currencyCode);
// 
//     void storeCurrencies(CurrencyData currencyData);
// }
// 
// Path: data/src/main/java/eu/rampsoftware/er/data/datasource/remote/CurrencyDataApi.java
// public interface CurrencyDataApi {
// 
//     @GET("/historical/{date}.json")
//     Observable<Response<CurrencyList>> getCurrencies(@Path("date") String date,
//                                                      @Query("app_id") String appId);
// }
// 
// Path: presentation/src/main/java/eu/rampsoftware/er/properties/ApplicationProperties.java
// public interface ApplicationProperties {
//     String baseUrl();
// 
//     boolean logsEnabled();
// 
//     String getOerAppId();
// 
//     String sharedPreferencesName();
// }


// Path: presentation/src/main/java/eu/rampsoftware/er/di/IApplicationModule.java
import android.content.Context;
import javax.inject.Named;
import eu.rampsoftware.er.data.CurrencyRepository;
import eu.rampsoftware.er.data.PreferencesData;
import eu.rampsoftware.er.data.datasource.CurrencyDataSource;
import eu.rampsoftware.er.data.datasource.remote.CurrencyDataApi;
import eu.rampsoftware.er.properties.ApplicationProperties;

package eu.rampsoftware.er.di;




interface IApplicationModule {
    String provideExampleString();

    Context provideContext();

    ApplicationProperties provideApplicationProperties(Context context);

    CurrencyDataSource provideRemoteCurrencyDataSource(ApplicationProperties properties, CurrencyDataApi currencyDataApi);

    CurrencyDataSource provideLocalCurrencyDataSource();

    CurrencyRepository provideCurrencyRepository(@Named("local") CurrencyDataSource localSource,
                                                 @Named("remote") CurrencyDataSource remoteSource);

    PreferencesData providePreferencesData(ApplicationProperties properties);