// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/application/AndroidApplication.java
// public class AndroidApplication extends Application {
// 
//     private ApplicationComponent applicationComponent;
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         Fabric.with(this, new Crashlytics());
//         initializeInjector();
//     }
// 
//     private void initializeInjector() {
//         this.applicationComponent = DaggerApplicationComponent.builder()
//                 .applicationModule(new ApplicationModule(this))
//                 .build();
//     }
// 
//     public ApplicationComponent getApplicationComponent() {
//         return this.applicationComponent;
//     }
// 
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/domain/events/ErrorEvent.java
// public class ErrorEvent {
// 
//     public static final int ACTION_NO_ACTION = 0;
//     public static final int ACTION_REDIRECT_TO_LOGIN = 1;
//     public static final int ACTIONS_REQUEST_NEW_SCOPES = 2;
//     public static Exception exception;
// 
//     private String message;
//     private int action = ACTION_NO_ACTION;
// 
//     public ErrorEvent() {}
// 
//     public ErrorEvent(Exception exception) {
//         this.exception = exception;
//         this.message = exception.getMessage();
//     }
// 
//     public ErrorEvent(Exception exception, int action) {
//         this.exception = exception;
//         this.message = exception.getMessage();
//         this.action = action;
//     }
// 
//     public ErrorEvent(String message) {
//         this.message = message;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public int getAction() { return action; }
// 
//     public void setAction(int action) { this.action = action; }
// 
//     public static Exception getException() {
//         return exception;
//     }
// 
//     public static void setException(Exception exception) {
//         ErrorEvent.exception = exception;
//     }
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/view/errors/ViewErrorEvent.java
// public interface ViewErrorEvent
// {
//     void onError(ErrorEvent event);
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/view/errors/ViewErrorHandler.java
// public class ViewErrorHandler {
// 
//     private Bus bus;
//     ViewErrorEvent errorEvent;
// 
// 
//     public ViewErrorHandler(Bus bus, ViewErrorEvent errorEvent) {
//         this.bus = bus;
//         this.errorEvent = errorEvent;
//     }
// 
//     public void register(){
//         bus.register(this);
//     }
// 
//     public void unregister(){
//         bus.unregister(this);
//     }
// 
//     @Subscribe
//     public void onErrorEvent(ErrorEvent event) {
//         errorEvent.onError(event);
//     }
// 
// 
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/injector/ActivityModule.java
// @Module
// public class ActivityModule {
//     private final Activity activity;
// 
//     public ActivityModule(Activity activity){
//         this.activity = activity;
//     }
// 
//     @Provides
//     @PerActivity
//     Activity provideActivity(){
//         return activity;
//     }
// 
//     @Provides
//     @PerActivity
//     DomainErrorHandler provideDomainErrorHandler(Bus bus) {
//         return new DomainErrorHandler(bus);
//     }
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/injector/ApplicationComponent.java
// @Singleton
// @Component(modules = ApplicationModule.class)
// public interface ApplicationComponent {
//     void inject(BaseActivity baseActivity);
// 
//     // Exposed to sub-graphs
//     Context getContext();
//     Bus getBusProvider();
//     JobManager getJobManager();
//     MainThread getMainThread();
//     //Map<QueryPlayer, QueryPlayer> getSearchPlayersCache();
// }


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import com.squareup.otto.Bus;
import javax.inject.Inject;
import butterknife.ButterKnife;
import es.rogermartinez.paddlemanager.BuildConfig;
import es.rogermartinez.paddlemanager.R;
import es.rogermartinez.paddlemanager.base.application.AndroidApplication;
import es.rogermartinez.paddlemanager.base.domain.events.ErrorEvent;
import es.rogermartinez.paddlemanager.base.view.errors.ViewErrorEvent;
import es.rogermartinez.paddlemanager.base.view.errors.ViewErrorHandler;
import es.rogermartinez.paddlemanager.injector.ActivityModule;
import es.rogermartinez.paddlemanager.injector.ApplicationComponent;
        ButterKnife.setDebug(BuildConfig.DEBUG);
        ButterKnife.bind(this);
        viewErrorHandler = new ViewErrorHandler(bus, this);
    }

    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(layoutResID);
    }


    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onStart() {
        super.onStart();
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

    }

    public void onError(ErrorEvent event) {
        boolean redirectToLogin = ErrorEvent.ACTION_REDIRECT_TO_LOGIN == event.getAction();
        boolean needsScopes = ErrorEvent.ACTIONS_REQUEST_NEW_SCOPES == event.getAction();
        //TODO Errores

    }
// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/application/AndroidApplication.java
// public class AndroidApplication extends Application {
// 
//     private ApplicationComponent applicationComponent;
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         Fabric.with(this, new Crashlytics());
//         initializeInjector();
//     }
// 
//     private void initializeInjector() {
//         this.applicationComponent = DaggerApplicationComponent.builder()
//                 .applicationModule(new ApplicationModule(this))
//                 .build();
//     }
// 
//     public ApplicationComponent getApplicationComponent() {
//         return this.applicationComponent;
//     }
// 
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/domain/events/ErrorEvent.java
// public class ErrorEvent {
// 
//     public static final int ACTION_NO_ACTION = 0;
//     public static final int ACTION_REDIRECT_TO_LOGIN = 1;
//     public static final int ACTIONS_REQUEST_NEW_SCOPES = 2;
//     public static Exception exception;
// 
//     private String message;
//     private int action = ACTION_NO_ACTION;
// 
//     public ErrorEvent() {}
// 
//     public ErrorEvent(Exception exception) {
//         this.exception = exception;
//         this.message = exception.getMessage();
//     }
// 
//     public ErrorEvent(Exception exception, int action) {
//         this.exception = exception;
//         this.message = exception.getMessage();
//         this.action = action;
//     }
// 
//     public ErrorEvent(String message) {
//         this.message = message;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public int getAction() { return action; }
// 
//     public void setAction(int action) { this.action = action; }
// 
//     public static Exception getException() {
//         return exception;
//     }
// 
//     public static void setException(Exception exception) {
//         ErrorEvent.exception = exception;
//     }
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/view/errors/ViewErrorEvent.java
// public interface ViewErrorEvent
// {
//     void onError(ErrorEvent event);
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/view/errors/ViewErrorHandler.java
// public class ViewErrorHandler {
// 
//     private Bus bus;
//     ViewErrorEvent errorEvent;
// 
// 
//     public ViewErrorHandler(Bus bus, ViewErrorEvent errorEvent) {
//         this.bus = bus;
//         this.errorEvent = errorEvent;
//     }
// 
//     public void register(){
//         bus.register(this);
//     }
// 
//     public void unregister(){
//         bus.unregister(this);
//     }
// 
//     @Subscribe
//     public void onErrorEvent(ErrorEvent event) {
//         errorEvent.onError(event);
//     }
// 
// 
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/injector/ActivityModule.java
// @Module
// public class ActivityModule {
//     private final Activity activity;
// 
//     public ActivityModule(Activity activity){
//         this.activity = activity;
//     }
// 
//     @Provides
//     @PerActivity
//     Activity provideActivity(){
//         return activity;
//     }
// 
//     @Provides
//     @PerActivity
//     DomainErrorHandler provideDomainErrorHandler(Bus bus) {
//         return new DomainErrorHandler(bus);
//     }
// }
// 
// Path: app/src/main/java/es/rogermartinez/paddlemanager/injector/ApplicationComponent.java
// @Singleton
// @Component(modules = ApplicationModule.class)
// public interface ApplicationComponent {
//     void inject(BaseActivity baseActivity);
// 
//     // Exposed to sub-graphs
//     Context getContext();
//     Bus getBusProvider();
//     JobManager getJobManager();
//     MainThread getMainThread();
//     //Map<QueryPlayer, QueryPlayer> getSearchPlayersCache();
// }


// Path: app/src/main/java/es/rogermartinez/paddlemanager/base/view/activity/BaseActivity.java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import com.squareup.otto.Bus;
import javax.inject.Inject;
import butterknife.ButterKnife;
import es.rogermartinez.paddlemanager.BuildConfig;
import es.rogermartinez.paddlemanager.R;
import es.rogermartinez.paddlemanager.base.application.AndroidApplication;
import es.rogermartinez.paddlemanager.base.domain.events.ErrorEvent;
import es.rogermartinez.paddlemanager.base.view.errors.ViewErrorEvent;
import es.rogermartinez.paddlemanager.base.view.errors.ViewErrorHandler;
import es.rogermartinez.paddlemanager.injector.ActivityModule;
import es.rogermartinez.paddlemanager.injector.ApplicationComponent;

        ButterKnife.setDebug(BuildConfig.DEBUG);
        ButterKnife.bind(this);
        viewErrorHandler = new ViewErrorHandler(bus, this);
    }

    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(layoutResID);
    }


    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onStart() {
        super.onStart();
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

    }

    public void onError(ErrorEvent event) {
        boolean redirectToLogin = ErrorEvent.ACTION_REDIRECT_TO_LOGIN == event.getAction();
        boolean needsScopes = ErrorEvent.ACTIONS_REQUEST_NEW_SCOPES == event.getAction();
        //TODO Errores

    }
    protected abstract boolean showError(ErrorEvent event);