package xyz.adjutor.aniki.presentation.controller.anime import com.google.gson.Gson import com.google.gson.GsonBuilder import retrofit2.Call import retrofit2.Callback import retrofit2.Response import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import xyz.adjutor.aniki.data.anime.AnimeApi import xyz.adjutor.aniki.presentation.model.anime.AnimeResponse import xyz.adjutor.aniki.presentation.view.anime.DetailSearchAnimeActivity class DetailSearchAnimeController { lateinit var gson: Gson private lateinit var baseUrl: String //the api's base url lateinit var view: DetailSearchAnimeActivity fun onStart(DetailSearchAnimeActivity: DetailSearchAnimeActivity, animeId: String) { view = DetailSearchAnimeActivity baseUrl = "https://api.jikan.moe/" //the api's base url gson = GsonBuilder() .setLenient() .create() makeApiCall(baseUrl, animeId) } private fun makeApiCall(BASE_URL: String, animeId: String) { val retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create(gson)) .build() val service = retrofit.create(AnimeApi::class.java) val call = service.getAnimeData(animeId) //based on the id call.enqueue(object : Callback { override fun onResponse( call: Call, response: Response ) { if (response.isSuccessful && response.body() != null) { //if the code returned is >= 200 and < 300 AND the the body ain't empty val anime = response.body() //getting the AnimeResponse fields view.showDetail(anime!!) } else { view.showError("API ERROR : is not successful") } } override fun onFailure(call: Call, t: Throwable) { view.showError("API ERROR : onFailure") } }) } }