package com.hadiidbouk.appauth_ientityserver4;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;

import net.openid.appauth.AuthState;
import net.openid.appauth.AuthorizationException;
import net.openid.appauth.AuthorizationService;
import net.openid.appauth.ClientSecretPost;
import net.openid.appauth.TokenRequest;
import net.openid.appauth.TokenResponse;


import java.util.Timer;
import java.util.TimerTask;


public class TokenService extends Service {

    public static final int notifyAfter = 30000;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Timer timer = new Timer("TokenTimer",true);
        timer.scheduleAtFixedRate(new TokenTimer(),0,notifyAfter);
    }

    private class TokenTimer extends TimerTask{
        private SharedPreferencesRepository mSharedPrefRep = new SharedPreferencesRepository(TokenService.this);

        @Override
        public void run() {

            if(MyApp.Token == null)
                return;

            final AuthManager authManager = AuthManager.getInstance(TokenService.this);

            final AuthState authState = authManager.getAuthState();


            if(authState.getNeedsTokenRefresh()) {
                //Get New Token

                ClientSecretPost clientSecretPost = new ClientSecretPost(authManager.getAuth().getClientSecret());
                final TokenRequest request = authState.createTokenRefreshRequest();
                final AuthorizationService authService = authManager.getAuthService();

                authService.performTokenRequest(request, clientSecretPost, new AuthorizationService.TokenResponseCallback() {
                    @Override
                    public void onTokenRequestCompleted(@Nullable TokenResponse response, @Nullable AuthorizationException ex) {
                        if(ex != null){
                            ex.printStackTrace();
                            return;
                        }
                        authManager.updateAuthState(response,ex);
                        MyApp.Token = authState.getIdToken();
                    }
                });

            }

        }
    }
}