package xyz.adjutor.aniki.presentation.view.manga import android.os.Bundle import android.widget.ImageView import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions 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.R import xyz.adjutor.aniki.data.manga.MangaApi import xyz.adjutor.aniki.presentation.model.manga.MangaResponse class DetailSearchMangaActivity : AppCompatActivity() { private var baseUrl = "https://api.jikan.moe/" private val gson = GsonBuilder() .setLenient() .create() //used in the list private val intentMangaImageUrl = "themangaimageurl" private val intentMangaTitle = "themangatitle" private val intentMangaScore = "themangascore" //only used for the detail private val intentMangaId = "themangaid" private val intentMangaUrl = "themangaurl" private val intentMangaChapters = "themangachapters" private val intentMangaVolumes = "themangavolumes" private val intentMangaStartDate = "themangastartdate" private val intentMangaEndDate = "themangaenddate" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_detail_search_manga) val mangaImageUrl = intent.getStringExtra(intentMangaImageUrl) val mangaTitle = intent.getStringExtra(intentMangaTitle) val mangaScore = intent.getStringExtra(intentMangaScore) val mangaId = intent.getStringExtra(intentMangaId) val mangaUrl = intent.getStringExtra(intentMangaUrl) val mangaChapters = intent.getStringExtra(intentMangaChapters) val mangaVolumes = intent.getStringExtra(intentMangaVolumes) val mangaStartDate = intent.getStringExtra(intentMangaStartDate) val mangaEndDate = intent.getStringExtra(intentMangaEndDate) val ivImage: ImageView = findViewById(R.id.iv_detail_image) val tvTitle: TextView = findViewById(R.id.tv_detail_title) val tvScore: TextView = findViewById(R.id.tv_detail_score) val tvId: TextView = findViewById(R.id.tv_detail_id) val tvUrl: TextView = findViewById(R.id.tv_url) val tvChapters: TextView = findViewById(R.id.tv_chapters) val tvVolumes: TextView = findViewById(R.id.tv_volumes) val tvStartDate: TextView = findViewById(R.id.tv_start_date) val tvEndDate: TextView = findViewById(R.id.tv_end_date) Glide .with(this) .load(mangaImageUrl) .apply(RequestOptions().override(400)) .into(ivImage) tvTitle.text = mangaTitle tvScore.text = mangaScore tvId.text = mangaId tvUrl.text = mangaUrl //using null as a string because it has been converted to a string before tvChapters.text = if (mangaChapters != "null") { mangaChapters } else { fieldIsNull() } tvVolumes.text = if (mangaVolumes != "null") { mangaVolumes } else { fieldIsNull() } tvStartDate.text = splitDate(mangaStartDate!!) tvEndDate.text = if (mangaEndDate != "null") { splitDate(mangaEndDate!!) } else { fieldIsNull() } makeApiCall(baseUrl, mangaId.toString()) } private fun splitDate(mangaDate: String): CharSequence { val delimiter = "T" return mangaDate .split(delimiter) //split between the date and the time .toTypedArray()[0] //convert it to an array and take the first string } private fun makeApiCall(BASE_URL: String, mangaId: String) { val retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create(gson)) .build() val service = retrofit.create(MangaApi::class.java) val call = service.getMangaData(mangaId) //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 manga = response.body() //getting the MangaResponse fields showDetail(manga!!) } else { showError("API ERROR : is not successful") } } override fun onFailure(call: Call, t: Throwable) { showError("API ERROR : onFailure") } }) } private fun showDetail(manga: MangaResponse) { //elements from MangaResponse val tvSynopsis: TextView = findViewById(R.id.tv_synopsis) val tvRank: TextView = findViewById(R.id.tv_detail_rank) val tvBackground: TextView = findViewById(R.id.tv_background) tvSynopsis.text = manga.synopsis.toString() tvRank.text = manga.rank.toString() tvBackground.text = if (manga.background != null) { manga.background.toString() } else { fieldIsNull() } } fun showError(text: String) { Toast.makeText(this, text, Toast.LENGTH_LONG).show() } private fun fieldIsNull(): String { return "Unknown" } }