Untitled

mail@pastecode.io avatarunknown
plain_text
2 months ago
59 kB
3
Indexable
Never
package com.zonamediagroup.zonamahasiswa.ActivityForhat

import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.text.Html
import android.text.InputFilter
import android.text.Spanned
import android.util.Log
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.LinearLayout
import android.widget.MediaController
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.bumptech.glide.Glide
import com.zonamediagroup.zonamahasiswa.CHECKTULISJAWABAN
import com.zonamediagroup.zonamahasiswa.R
import com.zonamediagroup.zonamahasiswa.Server
import com.zonamediagroup.zonamahasiswa.adapters.HomeAdapter
import com.zonamediagroup.zonamahasiswa.adapters.HomePictureAdapter
import com.zonamediagroup.zonamahasiswa.adapters.KomentarAdapter
import com.zonamediagroup.zonamahasiswa.databinding.ActivityBacaCurhatanBinding
import com.zonamediagroup.zonamahasiswa.komponen_retrofit.ApiConfig
import com.zonamediagroup.zonamahasiswa.komponen_retrofit.response.*
import com.zonamediagroup.zonamahasiswa.localPersistent.ZonaSharedpref
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class BacaCurhatanActivity : AppCompatActivity() {

    private lateinit var binding: ActivityBacaCurhatanBinding
    private lateinit var layoutError: LinearLayout
    private lateinit var getIdCurhatan: String
    private lateinit var getBearerToken: String
    private lateinit var zonaSharedpref: ZonaSharedpref
    private lateinit var data: ArrayList<DataItem>
    private lateinit var komentarAdapter: KomentarAdapter
    private lateinit var recyclerViewBalasKomentar: RecyclerView
    private lateinit var retrofit: Call<ResponseGetCurhatanTanggapan>

    private lateinit var homePictureAdapter: HomePictureAdapter
    private lateinit var homePictureAdapter2: HomePictureAdapter
    private lateinit var dots: ArrayList<TextView>
    private lateinit var dots2: ArrayList<TextView>

    private var KOMENTARATAUBALASKOMENTAR = "komentar"
    private var idKomentar: Int? = 0
    private var position: Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityBacaCurhatanBinding.inflate(layoutInflater)
        setContentView(binding.root)

        /* ini buat testing dapetin token firebase jum'at 19 mei 2023 */
//        FirebaseMessaging.getInstance().token.addOnCompleteListener {
//            if (!it.isSuccessful) {
//                return@addOnCompleteListener
//            }
//            val token = it.result
//            Log.e("RFK", "token nya lur $token", )
//        }

        data = arrayListOf<DataItem>()

        CHECKTULISJAWABAN = null
        zonaSharedpref = ZonaSharedpref(this)

        /*Mengecek apakah di profile posisinya user asli/anonim? jika true maka asli jika false anonim*/
        val zonaShare = zonaSharedpref.getSebagaiUser()
        if (zonaShare) {
            Glide.with(this@BacaCurhatanActivity)
                .load(zonaSharedpref.getImageUser())
                .circleCrop()
                .placeholder(R.drawable.ic_no_image_available)
                .into(binding.idimgKomentar)
        } else {
            Glide.with(this@BacaCurhatanActivity)
                .load("http://zonamahasiswa.id/assets/img/avatar1.png")
                .circleCrop()
                .placeholder(R.drawable.ic_no_image_available)
                .into(binding.idimgKomentar)
        }
        /*END Mengecek apakah di profile posisinya user asli/anonim? jika true maka asli jika false anonim*/

        binding.imgCloseTulisjawaban.setOnClickListener {
            onBackPressed()
        }

        val data = intent.data
        if (data != null) {
            val parameterIdpostingan = data.getQueryParameter("id")!!
            val parameterId = data.getQueryParameter("shareid")!!

            getIdCurhatan = parameterIdpostingan
            getBearerToken = zonaSharedpref.getAccesToken()

            Log.e("RFKY", "onCreate: idpostingan $parameterIdpostingan" )
            Log.e("RFKY", "onCreate: id $parameterId" )

        } else {
            getIdCurhatan = intent.getStringExtra(HomeAdapter.ID)!!
            getBearerToken = intent.getStringExtra(HomeAdapter.KEY_BEARER)!!
        }

        /*Keperluan ketika error dan muncul tampilan error*/
        layoutError = findViewById<LinearLayout>(R.id.eror_layar)
        val cobaLagi = findViewById<TextView>(R.id.coba_lagi)
        cobaLagi.setOnClickListener {
            requestApi(getBearerToken, getIdCurhatan, data, zonaShare)
            requestKomentar(getBearerToken, getIdCurhatan)
            loading()
        }
        /*END Keperluan ketika error dan muncul tampilan error*/

        requestApi(getBearerToken, getIdCurhatan, data, zonaShare)
        requestKomentar(getBearerToken, getIdCurhatan)
        loading()

        /*KIRIM KOMENTAR*/
        binding.btnKirim.setOnClickListener {
            binding.btnKirim.isEnabled = false
            requestTambahKomentar(binding.idedtMessage.text.toString(), zonaShare )

            binding.idedtMessage.setText("")

            closePopUpBalasKomentar()

            val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
            imm.hideSoftInputFromWindow(binding.idedtMessage.windowToken, 0)
        }

        /* VALIDASI AWALAN KOMENTAR SELALU HURUF BESAR */
        binding.idedtMessage.filters = arrayOf(object : InputFilter.AllCaps() {
            override fun filter(
                source: CharSequence?,
                start: Int,
                end: Int,
                dest: Spanned?,
                dstart: Int,
                dend: Int
            ): CharSequence {
                if (dend == 0) {
                    return source.toString().toUpperCase()
                } else {
                    return source.toString()
                }
            }
        })

        binding.btnComment.setOnClickListener {
            binding.idedtMessage.requestFocus()
            val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm.showSoftInput(binding.idedtMessage, InputMethodManager.SHOW_IMPLICIT)
        }

        val x = intent.getStringExtra("komentar")
        if (x != null) {
            binding.idedtMessage.requestFocus()
            val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
        }

        binding.swiperefresh.setOnRefreshListener {
            requestApi(getBearerToken, getIdCurhatan, data, zonaShare)
            requestKomentar(getBearerToken, getIdCurhatan)
            loading()
            binding.swiperefresh.isRefreshing = false
        }

    }

    override fun onBackPressed() {
        super.onBackPressed()
        CHECKTULISJAWABAN = "checktulisjawaban"
        retrofit.cancel()
    }

    fun requestApi(bearer: String, id: String, data: Uri?, type: Boolean) {
        val typeUser = if (type) "tidak" else "ya"
        retrofit = ApiConfig.getApiService(Server.BASE_URL).getBacaPostingan("Bearer $bearer", id)
        retrofit.enqueue(object : Callback<ResponseGetCurhatanTanggapan> {
            override fun onResponse(
                call: Call<ResponseGetCurhatanTanggapan>,
                response: Response<ResponseGetCurhatanTanggapan>
            ) {
                if (response.isSuccessful) {
                    val dataResponse = response.body()!!

                    /*validasi postingan di hapus*/
                    if (dataResponse.data?.statusPublish == "published") {
                        /*validasi postingan di banned*/
                        if (dataResponse.data.statusReport == "tidak") {
                            tampil()
                            Log.e("RFK", "onResponse: ${dataResponse.status}", )

                            var judul : String? = dataResponse.data?.judulCurhatan
                            val fotoUser = dataResponse.data?.user?.get(0)?.imageUser

                            val nama = dataResponse.data?.namaPenulis
                            val namaAnonim = dataResponse.data?.user_anonimous?.get(0)?.nama_anonim
                            val username = dataResponse.data?.user?.get(0)?.username
                            val usernameAnonim = dataResponse.data?.user_anonimous?.get(0)?.username_anonim
                            val fotoAnonim = dataResponse.data?.foto_anonim

                            val waktu = dataResponse.data?.datePublish
                            val verified = dataResponse.data?.user?.get(0)?.verified
                            var follow = dataResponse.data?.follow
                            val kategori = dataResponse.data?.kategori?.get(0)?.namaKategori
                            val deskripsi = dataResponse.data?.isiCurhatan

                            var totalLike = dataResponse.data?.totalLike
                            var validasiLike = dataResponse.data?.user_like
                            val totalKomentar = dataResponse.data?.totalKomentar
                            val totalTanggapan = dataResponse.data?.totalJawabanTanggapan
                            val totalShare = dataResponse.data?.totalShare
                            val idKategori = dataResponse.data?.idKategori

                            val type = dataResponse.data?.typeCurhatan

                            if (dataResponse.data.foto?.size != 0) {
                                val dataFile = arrayListOf<String>()

                                for (i in dataResponse.data.foto?.indices!!) {
                                    dataFile.add(dataResponse.data.foto[i]?.file!!)
                                }

                                initGambarOrVideo(dataResponse.data.foto[0]?.type!!, dataFile)
                            }

                            if (dataResponse.data.curhatanbro?.size != 0) {
                                if (dataResponse.data.curhatanbro?.get(0)?.foto_file?.size != 0) {
                                    val dataFile = arrayListOf<String>()

                                    for (i in dataResponse.data.curhatanbro?.get(0)?.foto_file?.indices!!) {
                                        dataFile.add(dataResponse.data.curhatanbro[0]?.foto_file!![i]?.file!!)
                                    }

                                    initGambarOrVideo2(
                                        dataResponse.data.curhatanbro[0]?.foto_file!![0]?.type!!,
                                        dataFile
                                    )
                                }
                            }

                            if (type == "Curhatan") {
                                binding.idborderCurhatan.visibility = View.GONE
                            } else {
                                /* Kalau tanggapan kesini */
                                binding.btnLoop.visibility = View.GONE
                                binding.idborderCurhatan.visibility = View.VISIBLE

                                /* Jika dari deeplink ini jalan */
                                if (data != null) {
                                    Log.e("RFK", "onResponse: deep link nih ${dataResponse.data?.idCurhatan}")
                                    requestApiUntukTanggapanKetikaDeepLink(dataResponse.data?.idCurhatan.toString())
                                } else {
                                    bacaCurhatanDariTanggapan(dataResponse.data?.idCurhatan.toString())

                                    Log.e("RFK", "onResponse: dari biasa ${dataResponse.data?.idCurhatan}")
                                    val foto1 = intent.getStringExtra("foto")
                                    val nama1 = intent.getStringExtra("nama")
                                    judul = intent.getStringExtra("judul")
                                    val deskripsi1 = intent.getStringExtra("deskripsi")

                                    Glide.with(this@BacaCurhatanActivity)
                                        .load(foto1)
                                        .circleCrop()
                                        .placeholder(R.drawable.ic_no_image_available)
                                        .into(binding.idimgPertanyaan1)

                                    binding.idtvNamaPenggunaPertanyaan.text = nama1
                                    Log.e("RFK", "onResponse: judul lur $judul ${judul == null} ${judul == "null"}", )
                                    if (judul != null && judul != "null") {
                                        binding.idtvPertanyaan.text = judul
                                    } else {
                                        binding.idtvPertanyaan.visibility = View.GONE

                                        val layoutParam = binding.idtvDeskripsi.layoutParams as ConstraintLayout.LayoutParams
                                        layoutParam.topMargin = 32
                                    }
                                    binding.idtvDeskripsi.text = deskripsi1
                                }
                            }

                            if (zonaSharedpref.getNamaPengguna() == username || zonaSharedpref.getUsernameAnonim() == username) {
                                binding.idtvIkuti.visibility = View.GONE
                            } else {
                                binding.idtvIkuti.visibility = View.VISIBLE
                            }

                            /*Validasi yang posting user asli/anonim*/
                            Log.e("SELASA.20.06", "onResponse: ${dataResponse.data?.anonymouse} ")
                            if (dataResponse.data?.anonymouse == "tidak") {
                                Log.e("SELASA.20.06", "bukan anonim ")
                                Glide.with(this@BacaCurhatanActivity)
                                    .load(fotoUser)
                                    .circleCrop()
                                    .placeholder(R.drawable.ic_no_image_available)
                                    .into(binding.idimgPertanyaan)

                                binding.idtvNamapengguna.text = nama

                                /*Validasi ketika request server untuk Ikuti*/
                                if (follow != null) {
                                    binding.idtvIkuti.apply {
                                        text = "Mengikuti"
                                        setTextColor(Color.parseColor("#6C757D"))
                                    }
                                } else {
                                    binding.idtvIkuti.apply {
                                        text = "Ikuti+"
                                        setTextColor(Color.parseColor("#0D6EFD"))
                                    }
                                }

                                binding.idtvIkuti.setOnClickListener {
                                    if (follow != null) {
                                        binding.idtvIkuti.apply {
                                            text = "Ikuti+"
                                            setTextColor(Color.parseColor("#0D6EFD"))
                                        }
                                        ikutiUser(username!!, bearer, typeUser)
                                        follow = null
                                    } else {
                                        binding.idtvIkuti.apply {
                                            text = "Mengikuti"
                                            setTextColor(Color.parseColor("#6C757D"))
                                        }
                                        ikutiUser(username!!, bearer, typeUser)
                                        follow = 2
                                    }
                                }

                                binding.idimgPertanyaan.setOnClickListener {
                                    melihatProfileOrangLain(username, follow)
                                }
                                binding.idtvNamapengguna.setOnClickListener {
                                    melihatProfileOrangLain(username, follow)
                                }

                            } else {
                                Log.e("SELASA.20.06", " anonim ")
                                Glide.with(this@BacaCurhatanActivity)
                                    .load("http://zonamahasiswa.id/assets/img/avatar1.png")
                                    .circleCrop()
                                    .placeholder(R.drawable.ic_no_image_available)
                                    .into(binding.idimgPertanyaan)

                                binding.idtvNamapengguna.text = namaAnonim

                                /*Validasi ketika request server untuk Ikuti*/
                                if (follow != null) {
                                    binding.idtvIkuti.apply {
                                        text = "Batal Suka"
                                        setTextColor(Color.parseColor("#DC3545"))
                                    }
                                } else {
                                    binding.idtvIkuti.apply {
                                        text = "Suka"
                                        setTextColor(Color.parseColor("#0D6EFD"))
                                    }
                                }

                                binding.idtvIkuti.setOnClickListener {
                                    if (follow != null) {
                                        binding.idtvIkuti.apply {
                                            text = "Suka"
                                            setTextColor(Color.parseColor("#0D6EFD"))
                                        }
                                        ikutiUser(username!!, bearer, typeUser)
                                        follow = null
                                    } else {
                                        binding.idtvIkuti.apply {
                                            text = "Batal Suka"
                                            setTextColor(Color.parseColor("#DC3545"))
                                        }
                                        ikutiUser(username!!, bearer, typeUser)
                                        follow = 2
                                    }
                                }

                                binding.idimgPertanyaan.setOnClickListener {
                                    melihatProfileOrangLain(usernameAnonim, follow)
                                }
                                binding.idtvNamapengguna.setOnClickListener {
                                    melihatProfileOrangLain(usernameAnonim, follow)
                                }
                            }

                            if (verified != "tidak") {
                                binding.idiconVerified.visibility = View.VISIBLE
                            } else {
                                binding.idiconVerified.visibility = View.GONE
                            }

                            /*Validasi ketika request server untuk like*/
                            if (validasiLike?.toInt() != 0) {
                                /*Mengubah background like*/
                                binding.iconLikeForhat.apply {
                                    setImageResource(R.drawable.likelike)
                                    setColorFilter(ContextCompat.getColor(context, R.color.ada_like_forhat))
                                }
                            } else {
                                /*Mengubah background like*/
                                binding.iconLikeForhat.apply {
                                    setImageResource(R.drawable.like_forhat)
                                    setColorFilter(ContextCompat.getColor(context, R.color.black))
                                }
                            }

                            binding.btnLike.setOnClickListener {
                                if (validasiLike?.toInt() != 0) {
                                    /*Mengubah value TextView like*/
                                    val valueLike = binding.jumlahLikeForhat.text.toString().toInt() - 1
                                    binding.jumlahLikeForhat.apply {
                                        text = valueLike.toString()
                                    }

                                    /*Mengubah background like*/
                                    binding.iconLikeForhat.apply {
                                        setImageResource(R.drawable.like_forhat)
                                        setColorFilter(ContextCompat.getColor(context, R.color.black))
                                    }

                                    likePostingan(id, bearer, typeUser)
                                    validasiLike = "0"
                                    totalLike = valueLike
                                } else {
                                    /*Mengubah value TextView like*/
                                    val valueLike = binding.jumlahLikeForhat.text.toString().toInt() + 1
                                    binding.jumlahLikeForhat.apply {
                                        text = valueLike.toString()
                                    }

                                    /*Mengubah background like*/
                                    binding.iconLikeForhat.apply {
                                        setImageResource(R.drawable.likelike)
                                        setColorFilter(ContextCompat.getColor(context, R.color.ada_like_forhat))
                                    }

                                    likePostingan(id, bearer, typeUser)
                                    validasiLike = "1"
                                    totalLike = valueLike
                                }
                            }

                            binding.btnLoop.setOnClickListener {
                                val intent = Intent(this@BacaCurhatanActivity, TulisTanggapanActivity::class.java)
                                intent.putExtra(HomeAdapter.ID, getIdCurhatan)
                                intent.putExtra(HomeAdapter.KEY_BEARER, bearer)

                                if (dataResponse.data?.anonymouse == "ya") {
                                    intent.putExtra("foto", fotoAnonim)
                                    intent.putExtra("nama", namaAnonim)
                                    intent.putExtra("waktu", waktu)
                                    if (judul == null) {
                                        intent.putExtra("judul", deskripsi)
                                    } else {
                                        intent.putExtra("judul", judul.toString())
                                    }
                                    startActivity(intent)
                                } else {
                                    intent.putExtra("foto", fotoUser)
                                    intent.putExtra("nama", nama)
                                    intent.putExtra("waktu", waktu)
                                    if (judul == null) {
                                        intent.putExtra("judul", deskripsi)
                                    } else {
                                        intent.putExtra("judul", judul.toString())
                                    }
                                    startActivity(intent)
                                }

                                Log.e("SMW", "ID = $getIdCurhatan " )
                                Log.e("SMW", "FOTO = $fotoUser " )
                                Log.e("SMW", "NAMA = $nama " )
                            }

                            binding.btnShare.setOnClickListener {
                                val textnya = "https://curhatan-tanggapan.zonamahasiswa.net/?id=${getIdCurhatan}&shareid=${"44492"}"

                                val shreIntent = Intent(Intent.ACTION_SEND)
                                shreIntent.setType("text/plain")
                                shreIntent.putExtra(Intent.EXTRA_TEXT, textnya)
                                startActivity(Intent.createChooser(shreIntent, "Bagikan dengan"))

                                requestSharePostingan(getIdCurhatan)
                            }

                            binding.idtvKomentaran.text = "$totalKomentar Komentar"
                            if (judul != null && judul != "null") {
                                binding.idtvJudulcurhatan.text = judul.toString()
                            } else {
                                binding.idtvJudulcurhatan.visibility = View.GONE

                                val layoutParam = binding.idtvJawaban.layoutParams as ConstraintLayout.LayoutParams
                                layoutParam.topMargin = 30
                            }

                            binding.idtvKategoripertanyaan.text = kategori
                            binding.idtvWaktuposting.text = waktu
                            binding.idtvJawaban.text = deskripsi
                            binding.jumlahLikeForhat.text = totalLike.toString()
                            binding.jumlahCommentForhat.text = totalKomentar.toString()
                            binding.jumlahLoop.text = totalTanggapan.toString()
                            binding.jumlahShareForhat.text = totalShare.toString()

//                        requestGetFileFotoVideo()

                            binding.idtvKategoripertanyaan.setOnClickListener {
                                val intent = Intent(this@BacaCurhatanActivity, ListKategoriActivity::class.java)
                                intent.putExtra("KATEGORI", idKategori.toString())
                                startActivity(intent)
                            }
                        } else {
                            postinganSudahDihapus()
                        }
                    } else {
                        postinganSudahDihapus()
                    }
                } else {
                    error()
                }
            }

            override fun onFailure(call: Call<ResponseGetCurhatanTanggapan>, t: Throwable) {
                if (call.isCanceled) {

                } else {
                    error()
                }
            }

        })
    }

    fun requestApiUntukTanggapanKetikaDeepLink(idPostingan: String) {
        val retrofit = ApiConfig.getApiService(Server.BASE_URL).getBacaPostingan("Bearer $getBearerToken", idPostingan)
        retrofit.enqueue(object : Callback<ResponseGetCurhatanTanggapan> {
            override fun onResponse(
                call: Call<ResponseGetCurhatanTanggapan>,
                response: Response<ResponseGetCurhatanTanggapan>
            ) {
                val dataResponse = response.body()!!
                if (response.isSuccessful) {
                    Log.e("RFK", "onResponse: berhasil lur WW ${dataResponse.status}", )

                    if (dataResponse.data?.anonymouse == "ya") {
                        Glide.with(this@BacaCurhatanActivity)
                            .load("http://zonamahasiswa.id/assets/img/avatar1.png")
                            .circleCrop()
                            .placeholder(R.drawable.ic_no_image_available)
                            .into(binding.idimgPertanyaan1)
                        binding.idtvNamaPenggunaPertanyaan.text = dataResponse.data?.user_anonimous?.get(0)?.nama_anonim
                    } else {
                        Glide.with(this@BacaCurhatanActivity)
                            .load(dataResponse.data?.user?.get(0)?.imageUser)
                            .circleCrop()
                            .placeholder(R.drawable.ic_no_image_available)
                            .into(binding.idimgPertanyaan1)
                        binding.idtvNamaPenggunaPertanyaan.text = dataResponse.data?.namaPenulis
                    }

                    if (dataResponse.data?.judulCurhatan != null) {
                        binding.idtvJudulcurhatan.text = dataResponse.data?.judulCurhatan.toString()
                        binding.idtvPertanyaan.text = dataResponse.data?.judulCurhatan.toString()
                    } else {
                        binding.idtvJudulcurhatan.visibility = View.GONE
                        binding.idtvPertanyaan.visibility = View.GONE

                        val layoutParam = binding.idtvJawaban.layoutParams as ConstraintLayout.LayoutParams
                        layoutParam.topMargin = 30

                        val layoutParam2 = binding.idtvDeskripsi.layoutParams as ConstraintLayout.LayoutParams
                        layoutParam2.topMargin = 32
                    }

                    binding.idtvDeskripsi.text = dataResponse.data?.isiCurhatan

                    bacaCurhatanDariTanggapan(idPostingan)

                    Log.e("RFK", "onResponse: datanya deepLink ${dataResponse.data?.namaPenulis} | ${dataResponse.data?.judulCurhatan.toString()} | ${dataResponse.data?.isiCurhatan} | ${dataResponse.data?.user?.get(0)?.imageUser} | ${dataResponse.data?.cover}", )
                } else {
                    Log.e("RFK", "onResponse: gagal ${dataResponse.status}", )
                }
            }

            override fun onFailure(call: Call<ResponseGetCurhatanTanggapan>, t: Throwable) {
                Log.e("RFK", "onResponse: gagal su", )
            }
        })
    }

    fun requestKomentar(bearer: String, id: String) {
        val retrofit = ApiConfig.getApiService(Server.BASE_URL).getKomentar("Bearer " + bearer, id, "all")
        retrofit.enqueue(object : Callback<ResponseGetKomentar> {
            override fun onResponse(
                call: Call<ResponseGetKomentar>,
                response: Response<ResponseGetKomentar>
            ) {
                if (response.isSuccessful) {
                    val dataResponse = response.body()!!
                    val listData = dataResponse?.data

                    Log.e("RFK", "STATUS: ${dataResponse.status}", )
                    if (data.size != 0) data.clear()
                    if (dataResponse.status == 1) {
                        for (i in listData?.indices!!) {
                            val foto = listData[i]?.fotoUser
                            val nama = listData[i]?.nama
                            val waktu = listData[i]?.createdAt
                            val komentar = listData[i]?.komentar
                            val id = listData[i]?.id
                            val lastBalasan = listData[i]?.lastBalasan
                            val totalBalasan = listData[i]?.totalBalasan
                            val totalSuka = listData[i]?.totalSuka
                            val userLike = listData[i]?.userLike
                            val idCurhatan = listData[i]?.idCurhatan
                            val username = listData[i]?.username

                            data.add(
                                DataItem(
                                    username,
                                    totalBalasan,
                                    totalSuka,
                                    komentar,
                                    "",
                                    waktu,
                                    userLike,
                                    lastBalasan,
                                    foto,
                                    idCurhatan,
                                    nama,
                                    "",
                                    id,
                                    "",
                                    0,
                                    arrayListOf()
                                )
                            )
                        }

                        /*Jika response next tidak sama dengan 0 maka tampilkan komentar lain*/
                        if (dataResponse.next.toString() != "0") {
                            binding.idtvLainnya.apply {
                                visibility = View.VISIBLE
                                setOnClickListener {
                                    isEnabled = false
                                    this.text = "Memuat..."
                                    requestNextKomentar(bearer, id, dataResponse.next.toString())
                                }
                            }

                        } else {
                            binding.idtvLainnya.visibility = View.GONE
                        }
                    }

                    initRvKomentar()
                } else {

                }
            }

            override fun onFailure(call: Call<ResponseGetKomentar>, t: Throwable) {
                Log.e("RFK", "ERROR APA: ${t.message}", )
            }
        })
    }

    fun requestNextKomentar(bearer: String, id: String, next: String) {
        val retrofit = ApiConfig.getApiService(Server.BASE_URL).getKomentar("Bearer " + bearer, id, next)
        retrofit.enqueue(object : Callback<ResponseGetKomentar> {
            override fun onResponse(
                call: Call<ResponseGetKomentar>,
                response: Response<ResponseGetKomentar>
            ) {
                binding.idtvLainnya.isEnabled = true
                if (response.isSuccessful) {
                    val dataResponse = response.body()!!
                    val listData = dataResponse?.data

                    if (dataResponse.status == 1) {
                        for (i in listData?.indices!!) {
                            val foto = listData[i]?.fotoUser
                            val nama = listData[i]?.nama
                            val waktu = listData[i]?.createdAt
                            val komentar = listData[i]?.komentar
                            val id = listData[i]?.id
                            val lastBalasan = listData[i]?.lastBalasan
                            val totalBalasan = listData[i]?.totalBalasan
                            val totalSuka = listData[i]?.totalSuka
                            val userLike = listData[i]?.userLike
                            val idCurhatan = listData[i]?.idCurhatan
                            val username = listData[i]?.username

                            data.add(
                                DataItem(
                                    username,
                                    totalBalasan,
                                    totalSuka,
                                    komentar,
                                    "",
                                    waktu,
                                    userLike,
                                    lastBalasan,
                                    foto,
                                    idCurhatan,
                                    nama,
                                    "",
                                    id,
                                    "",
                                    0,
                                    arrayListOf()
                                )
                            )
                        }

                        binding.idtvLainnya.text = "Lainnya"
                        komentarAdapter.notifyDataSetChanged()

                        /*Jika response next tidak sama dengan 0 maka tampilkan komentar lain*/
                        if (dataResponse.next.toString() != "0") {
                            binding.idtvLainnya.apply {
                                visibility = View.VISIBLE
                                setOnClickListener {
                                    binding.idtvLainnya.isEnabled = false
                                    this.text = "Memuat..."
                                    requestNextKomentar(bearer, id, dataResponse.next.toString())
                                }
                            }

                        } else {
                            binding.idtvLainnya.visibility = View.GONE
                        }
                    }
                } else {

                }
            }

            override fun onFailure(call: Call<ResponseGetKomentar>, t: Throwable) {
                binding.idtvLainnya.isEnabled = true
            }

        })
    }

    fun requestTambahKomentar(input: String, typeUser: Boolean) {

        //harus tau return variable
        val type = if (typeUser) "tidak" else "ya"
        val validasiUser = if (typeUser) zonaSharedpref.getNamaPengguna() else zonaSharedpref.getUsernameAnonim()

        if (KOMENTARATAUBALASKOMENTAR == "komentar") {
            val retrofit = ApiConfig.getApiService(Server.BASE_URL).tambahKomentar("Bearer $getBearerToken", getIdCurhatan, input, type)
            retrofit.enqueue(object : Callback<ResponseStoreKomentar> {
                override fun onResponse(
                    call: Call<ResponseStoreKomentar>,
                    response: Response<ResponseStoreKomentar>
                ) {
                    if (response.isSuccessful) {
                        val dataResponse = response.body()!!
                        Log.e("RFK", "onResponse: hasil nya ${dataResponse.status}", )

                        val foto = dataResponse.data?.foto_user
                        val nama = dataResponse.data?.nama
                        val waktu = dataResponse.data?.created_at
                        val komentar = dataResponse.data?.komentar
                        val id = dataResponse.data?.id

                        data.add(0,
                            DataItem(
                                validasiUser,
                                0,
                                0,
                                komentar,
                                "",
                                waktu,
                                null,
                                null,
                                foto,
                                "",
                                nama,
                                "",
                                id,
                                "",
                                0,
                                arrayListOf()
                            )
                        )

                        binding.idtvKomentaran.text = dataResponse.total_semua_komentar + " Komentar"
                        binding.jumlahCommentForhat.text = dataResponse.total_semua_komentar

                        komentarAdapter.notifyDataSetChanged()
                        binding.btnKirim.isEnabled = true

                    } else {
                        binding.btnKirim.isEnabled = true
                    }
                }

                override fun onFailure(call: Call<ResponseStoreKomentar>, t: Throwable) {
                    binding.btnKirim.isEnabled = true
                }

            })
        } else {
            Log.e("RFK", "requestTambahKomentar: id komentar $idKomentar", )
            val retrofit = ApiConfig.getApiService(Server.BASE_URL).tambahBalasKomentar("Bearer $getBearerToken", getIdCurhatan, idKomentar.toString(), input, type)
            retrofit.enqueue(object : Callback<ResponseStoreKomentar> {
                override fun onResponse(
                    call: Call<ResponseStoreKomentar>,
                    response: Response<ResponseStoreKomentar>
                ) {
                    if (response.isSuccessful) {
                        val dataResponse = response.body()!!
                        Log.e("RFK", "onResponse: hasil nya balas komentar ${dataResponse.status}", )

                        val foto = dataResponse.data?.foto_user
                        val nama = dataResponse.data?.nama
                        val waktu = dataResponse.data?.created_at
                        val komentar = dataResponse.data?.komentar
                        val id = dataResponse.data?.id

                        val dataBalasKomentar = arrayListOf<DataItem>()

                        dataBalasKomentar.add(
                            DataItem(
                                validasiUser,
                                0,
                                0,
                                komentar,
                                "",
                                waktu,
                                null,
                                null,
                                foto,
                                "",
                                nama,
                                "",
                                id,
                                "",
                                0,
                                arrayListOf(),
                                position.toString(),
                                idKomentar.toString()
                            )
                        )

                        komentarAdapter.tambahBalasKomentar(dataBalasKomentar, recyclerViewBalasKomentar, position)
                        binding.btnKirim.isEnabled = true
                    } else {
                        binding.btnKirim.isEnabled = true
                    }
                }

                override fun onFailure(call: Call<ResponseStoreKomentar>, t: Throwable) {
                    binding.btnKirim.isEnabled = true
                }
            })
        }
    }

    fun initRvKomentar() {
        komentarAdapter = KomentarAdapter(data, getBearerToken, this, zonaSharedpref.getNamaPengguna(), zonaSharedpref.getUsernameAnonim())
        komentarAdapter.setOnItemClickCallback(object : KomentarAdapter.OnItemClickCallback {
            override fun onItemClicked(username: String?, idKomentar: Int?, recycler: RecyclerView, position: Int, validasi: String) {
                recyclerViewBalasKomentar = recycler

                binding.idrvKomentar.smoothScrollToPosition(10)

                /*Memunculkan keyboard*/
                binding.idedtMessage.requestFocus()
                val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                imm.showSoftInput(binding.idedtMessage, InputMethodManager.SHOW_IMPLICIT)

                /*Jika komentar maka idkomentar ganti*/
                if (validasi == "komentar") {
                    popUpBalasKomentar(username, idKomentar, position)
                } else {
                    popUpBalasKomentar(username, idKomentar, position)
                }

            }
        })

        binding.idrvKomentar.apply {
            layoutManager = LinearLayoutManager(this@BacaCurhatanActivity)
            adapter = komentarAdapter
        }
    }

    fun popUpBalasKomentar(username: String?, idKomentar: Int?, position: Int) {
        KOMENTARATAUBALASKOMENTAR = "balaskomentar"
        this.idKomentar = idKomentar
        this.position = position

        binding.idlayoutmembalas.apply {
            visibility = View.VISIBLE
            text = "Membalas $username"
        }

        binding.idclosebalaskomentar.apply {
            visibility = View.VISIBLE
            setOnClickListener {
                closePopUpBalasKomentar()
            }
        }
    }

    fun closePopUpBalasKomentar() {
        KOMENTARATAUBALASKOMENTAR = "komentar"
        binding.idlayoutmembalas.visibility = View.GONE
        binding.idclosebalaskomentar.visibility = View.GONE
    }

    fun loading() {
        binding.loadingShimmer.apply {
            visibility = View.VISIBLE
            startShimmer()
        }
        layoutError.visibility = View.GONE
        binding.idlayoutkontent.visibility = View.GONE
        binding.layoutSudahdihapus.visibility = View.GONE
    }

    fun error() {
        binding.loadingShimmer.apply {
            visibility = View.GONE
            stopShimmer()
        }
        layoutError.visibility = View.VISIBLE
        binding.idlayoutkontent.visibility = View.GONE
        binding.layoutSudahdihapus.visibility = View.GONE
    }

    fun tampil() {
        binding.loadingShimmer.apply {
            visibility = View.GONE
            stopShimmer()
        }
        layoutError.visibility = View.GONE
        binding.idlayoutkontent.visibility = View.VISIBLE
        binding.layoutSudahdihapus.visibility = View.GONE
    }

    fun postinganSudahDihapus() {
        binding.loadingShimmer.apply {
            visibility = View.GONE
            stopShimmer()
        }
        layoutError.visibility = View.GONE
        binding.idlayoutkontent.visibility = View.GONE
        binding.layoutSudahdihapus.visibility = View.VISIBLE
    }

    fun ikutiUser(username: String, bearerToken: String, type: String) {
        val retrofit = ApiConfig.getApiService(Server.BASE_URL).ikutiPengguna("Bearer $bearerToken", username, type)
        retrofit.enqueue(object : Callback<ResponseLogout> {
            override fun onResponse(
                call: Call<ResponseLogout>,
                response: Response<ResponseLogout>
            ) {
                if (response.isSuccessful) {
                    val dataresponse = response.body()!!
                    Log.e("RFK", "onResponse: sukses ikuti ${dataresponse.message}" , )
                } else {
                    Log.e("RFK", "onResponse: gagal ikuti", )
                }
            }

            override fun onFailure(call: Call<ResponseLogout>, t: Throwable) {
                Log.e("RFK", "onResponse: gaa ikuti", )
            }

        })
    }

    fun likePostingan(idPostingan: String, bearerToken: String, typeUser: String) {
        val retrofit = ApiConfig.getApiService(Server.BASE_URL).likePostingan("Bearer $bearerToken", idPostingan, typeUser)
        retrofit.enqueue(object : Callback<ResponseLogout> {
            override fun onResponse(
                call: Call<ResponseLogout>,
                response: Response<ResponseLogout>
            ) {
                if (response.isSuccessful) {
                    Log.e("RFK", "onResponse: sukses like", )
                } else {
                    Log.e("RFK", "onResponse: gaga like", )
                }
            }

            override fun onFailure(call: Call<ResponseLogout>, t: Throwable) {
                Log.e("RFK", "onResponse: glike", )
            }

        })
    }

    fun requestSharePostingan(idPostingan: String) {
        val retrofit = ApiConfig.getApiService(Server.BASE_URL).sharePostingan(idPostingan, "android ip", "android device", "android argent")
        retrofit.enqueue(object : Callback<ResponseLogout> {
            override fun onResponse(
                call: Call<ResponseLogout>,
                response: Response<ResponseLogout>
            ) {
                val dataResponse = response.body()!!
                if (response.isSuccessful) {
                    Log.e("RFK", "onResponse: data result sukses ${dataResponse.status}", )
                } else {
                    Log.e("RFK", "onResponse: data result gaga ${dataResponse.status}", )
                }
            }

            override fun onFailure(call: Call<ResponseLogout>, t: Throwable) {
                Log.e("RFK", "onResponse: data result gagal ${t.message}", )
            }
        })
    }

//    fun requestGetFileFotoVideo() {
//        val retrofit = ApiConfig.getApiService(Server.BASE_URL).getFileList("Bearer $getBearerToken", getIdCurhatan)
//        retrofit.enqueue(object : Callback<ResponseGetFileListFotoVideo> {
//            override fun onResponse(
//                call: Call<ResponseGetFileListFotoVideo>,
//                response: Response<ResponseGetFileListFotoVideo>
//            ) {
//                val dataResponse = response.body()!!
//                if (response.isSuccessful) {
//                    if (dataResponse.data.size != 0) {
//                        val dataFile = arrayListOf<String>()
//
//                        for (i in dataResponse.data.indices) {
//                            dataFile.add(dataResponse.data[i].file)
//                        }
//
//                        initGambarOrVideo(dataResponse.data[0].type, dataFile)
//                    }
//                } else {
//                    Log.e("RFK", "onResponse:  gagal lur ", )
//                }
//            }
//
//            override fun onFailure(call: Call<ResponseGetFileListFotoVideo>, t: Throwable) {
//
//                Log.e("RFK", "onResponse: errror ${t.message}", )
//            }
//
//        })
//    }

    fun initGambarOrVideo(type: String, data: ArrayList<String>) {
        Log.e("RFK", "initGambarOrVideo: $type ${data.size}", )

        binding.idlayoutGambar.visibility = View.VISIBLE
        Log.e("RFK", "initGambarOrVideoData: $type $data", )
        if (type == "image") {

            homePictureAdapter = HomePictureAdapter(data)

            binding.viewPager.adapter = homePictureAdapter
            dots = ArrayList()
            setIndicator()

            binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
                override fun onPageSelected(position: Int) {
                    selectedDot(position)
                    super.onPageSelected(position)
                }
            })

            Log.e("RFK", "initGambarOrVideo: ADAPTER ${homePictureAdapter.data}")

        } else {

            val videoUri = Uri.parse(data[0])
            val mediaController = MediaController(this)

            binding.idvideo.visibility = View.VISIBLE
            binding.playVideo.visibility = View.VISIBLE
            binding.viewPager.visibility = View.GONE

            binding.idvideo.setVideoURI(videoUri)
            binding.idvideo.setOnPreparedListener { mp ->
                binding.idvideo.seekTo(1)
                mp.setOnSeekCompleteListener {
                    binding.playVideo.setOnClickListener {
                        if (!binding.idvideo.isPlaying) {
                            binding.playVideo.visibility = View.GONE
                            binding.idvideo.start()
                            binding.idvideo.setMediaController(mediaController)
                            mediaController.show(2000)
                        }
                    }
                }
            }

            binding.idvideo.setOnClickListener {
                mediaController.visibility = View.VISIBLE
            }

            binding.idvideo.setOnCompletionListener {
                binding.playVideo.visibility = View.VISIBLE
            }

            binding.root.viewTreeObserver.addOnScrollChangedListener {
                if (binding.idvideo.isPlaying) {
                    binding.idvideo.pause()
                    binding.playVideo.visibility = View.VISIBLE
                    mediaController.visibility = View.GONE
                }
            }
        }
    }

    private fun selectedDot(position: Int) {
        for (i in 0 until homePictureAdapter.data.size) {
            if (i == position)
                dots[i].setTextColor(ContextCompat.getColor(this, R.color.bar_tulis_forhat_finished))
            else
                dots[i].setTextColor(ContextCompat.getColor(this, R.color.warna_stroke_submenufilterforhat_notselected))
            Log.e("RFK", "data2: ${data.size}")
            Log.e("RFK", "data2: ${homePictureAdapter.data.size}")
        }

    }

    private fun setIndicator() {
        /*ini agar ketika refresh, view nya ke reset ya*/
        binding.indicator.removeAllViews()
        /*END ini agar ketika refresh, view nya ke reset ya*/

        for (i in 0 until homePictureAdapter.data.size) {
            dots.add(TextView(this))
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                dots[i].text= Html.fromHtml("&#9679", Html.FROM_HTML_MODE_LEGACY).toString()
            } else {
                dots[i].text= Html.fromHtml("&#9679")
            }
            dots[i].textSize = 16f
            binding.indicator.addView(dots[i])
            Log.e("RFK", "data: ${data.size}")
        }
        if (homePictureAdapter.data.size == 1) {
            binding.indicator.visibility = View.GONE
        }
    }

    fun initGambarOrVideo2(type: String, data: ArrayList<String>) {
        Log.e("RFK", "initGambarOrVideo: $type ${data.size}", )

        binding.idlayoutGambar2.visibility = View.VISIBLE
        Log.e("RFK", "initGambarOrVideoData: $type $data", )
        if (type == "image") {

            homePictureAdapter2 = HomePictureAdapter(data)

            binding.viewPager2.adapter = homePictureAdapter2
            dots2 = ArrayList()
            setIndicator2()

            binding.viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
                override fun onPageSelected(position: Int) {
                    selectedDot2(position)
                    super.onPageSelected(position)
                }
            })

            Log.e("RFK", "initGambarOrVideo: ADAPTER ${homePictureAdapter2.data}")

        } else {

            val videoUri = Uri.parse(data[0])
            val mediaController = MediaController(this)

            binding.idvideo2.visibility = View.VISIBLE
            binding.playVideo2.visibility = View.VISIBLE
            binding.viewPager2.visibility = View.GONE

            binding.idvideo2.setVideoURI(videoUri)
            binding.idvideo2.setOnPreparedListener { mp ->
                binding.idvideo2.seekTo(1)
                mp.setOnSeekCompleteListener {
                    binding.playVideo2.setOnClickListener {
                        if (!binding.idvideo2.isPlaying) {
                            binding.playVideo2.visibility = View.GONE
                            binding.idvideo2.start()
                            binding.idvideo2.setMediaController(mediaController)
                            mediaController.show(2000)
                        }
                    }
                }
            }

            binding.idvideo2.setOnClickListener {
                mediaController.visibility = View.VISIBLE
            }

            binding.idvideo2.setOnCompletionListener {
                binding.playVideo2.visibility = View.VISIBLE
            }

            binding.root.viewTreeObserver.addOnScrollChangedListener {
                if (binding.idvideo2.isPlaying) {
                    binding.idvideo2.pause()
                    binding.playVideo2.visibility = View.VISIBLE
                    mediaController.visibility = View.GONE
                }
            }
        }
    }

    private fun selectedDot2(position: Int) {
        for (i in 0 until homePictureAdapter2.data.size) {
            if (i == position)
                dots2[i].setTextColor(ContextCompat.getColor(this, R.color.bar_tulis_forhat_finished))
            else
                dots2[i].setTextColor(ContextCompat.getColor(this, R.color.warna_stroke_submenufilterforhat_notselected))
            Log.e("RFK", "data2: ${data.size}")
        }

    }

    private fun setIndicator2() {
        /*ini agar ketika refresh, view nya ke reset ya*/
        binding.indicator2.removeAllViews()
        /*END ini agar ketika refresh, view nya ke reset ya*/

        for (i in 0 until homePictureAdapter2.data.size) {
            dots2.add(TextView(this))
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                dots2[i].text= Html.fromHtml("&#9679", Html.FROM_HTML_MODE_LEGACY).toString()
            } else {
                dots2[i].text= Html.fromHtml("&#9679")
            }
            dots2[i].textSize = 16f
            binding.indicator2.addView(dots2[i])
            Log.e("RFK", "data: ${data.size}")
        }
        if (homePictureAdapter2.data.size == 1) {
            binding.indicator2.visibility = View.GONE
        }
    }

    private fun bacaCurhatanDariTanggapan(idPostingan: String) {
        binding.idborderCurhatan.setOnClickListener {
            val intent = Intent(this@BacaCurhatanActivity, BacaCurhatanDariTanggapanActivity::class.java)
            intent.putExtra(HomeAdapter.ID, idPostingan)
            intent.putExtra(HomeAdapter.KEY_BEARER, getBearerToken)
            startActivity(intent)
        }
    }

    fun melihatProfileOrangLain(username: String?, isFollow: Int?) {
        Log.e("RFK", "melihat profile orang : kirim $username $isFollow", )
        val intent = Intent(this, ForhatProfileOrang::class.java)
        intent.putExtra("USERNAME", username)
        intent.putExtra("BEARER", getBearerToken)
        intent.putExtra("FOLLOW", isFollow)
        startActivity(intent)
    }
}