package com.example.webservicep3.sinc;
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import com.example.webservicep3.dao.AlunoDAO;
import com.example.webservicep3.dto.AlunoSync;
import com.example.webservicep3.event.AtualizaListaAlunoEvent;
import com.example.webservicep3.modelo.Aluno;
import com.example.webservicep3.preferences.AlunoPreferences;
import com.example.webservicep3.retrofit.RetrofitInicializador;
import org.greenrobot.eventbus.EventBus;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class AlunoSincronizador {
private final Context context;
private EventBus bus = EventBus.getDefault();
private AlunoPreferences preferences;
public AlunoSincronizador(Context context) {
this.context = context;
preferences = new AlunoPreferences(context);
}
public void buscaTodos(){
if(preferences.temVersao()){
buscaAlunosNovos(); //buscaNovos
}else{
buscaAlunos();
}
}
private void buscaAlunosNovos() {
String versao = preferences.getVersao();
Call<AlunoSync> call = new RetrofitInicializador().getAlunoService().novos(versao);
call.enqueue(buscaAlunosCallBack());
}
private void buscaAlunos() {
Call<AlunoSync> call = new RetrofitInicializador().getAlunoService().lista();
call.enqueue(buscaAlunosCallBack());
}
@NonNull
private Callback<AlunoSync> buscaAlunosCallBack() {
return new Callback<AlunoSync>() {
@Override
public void onResponse(Call<AlunoSync> call, Response<AlunoSync> response) {
AlunoSync alunoSync = response.body();
String versao = alunoSync.getMomentoDaUltimaModificacao();
preferences.salvaVersao(versao);
AlunoDAO dao = new AlunoDAO(context);
dao.sincroniza(alunoSync.getAlunos());
dao.close();
Log.i("versao", preferences.getVersao());
bus.post(new AtualizaListaAlunoEvent());
}
@Override
public void onFailure(Call<AlunoSync> call, Throwable t) {
Log.e("onFailure chamado", t.getMessage());
bus.post(new AtualizaListaAlunoEvent());
}
};
}
public void sincronizaAlunosInternos(){
AlunoDAO dao = new AlunoDAO(context);
List<Aluno> alunos = dao.listaNaoSincronizados();
Call<AlunoSync> call = new RetrofitInicializador().getAlunoService().atualiza(alunos);
call.enqueue(new Callback<AlunoSync>() {
@Override
public void onResponse(Call<AlunoSync> call, Response<AlunoSync> response) {
AlunoSync alunoSync = response.body();
dao.sincroniza(alunoSync.getAlunos());
dao.close();
}
@Override
public void onFailure(Call<AlunoSync> call, Throwable t) {
}
});
}
}