package com.cyb3rko.techniklogger.fragments import android.content.Context import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter import androidx.fragment.app.Fragment import com.afollestad.materialdialogs.LayoutMode import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.callbacks.onDismiss import com.afollestad.materialdialogs.customview.customView import com.cyb3rko.techniklogger.R import com.cyb3rko.techniklogger.data.objects.Member import com.cyb3rko.techniklogger.data.ParseController import com.cyb3rko.techniklogger.databinding.FragmentManageMembersBinding import com.google.android.material.switchmaterial.SwitchMaterial import com.google.android.material.textfield.TextInputEditText import es.dmoral.toasty.Toasty class ManageMembersFragment : Fragment() { private var _binding: FragmentManageMembersBinding? = null private lateinit var myContext: Context private val memberNames = mutableListOf() private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentManageMembersBinding.inflate(inflater, container, false) val root = binding.root myContext = requireContext() loadMembers() binding.fab.setOnClickListener { MaterialDialog(myContext, BottomSheet(LayoutMode.WRAP_CONTENT)).show { title(text = "Techniker hinzufügen") customView(R.layout.member_dialog, horizontalPadding = true) positiveButton(text = "Hinzufügen") { val view = it.view val newName = view.findViewById(R.id.name).text.toString() val newAdmin = view.findViewById(R.id.admin).isChecked Member().apply { setAdmin(newAdmin) setName(newName) saveInBackground { if (it == null) { Toasty.success(myContext, "Hinzugefügt").show() showAnimation(true) loadMembers() } else { Toasty.error(myContext, "Fehler bei Speicherung").show() Log.e("TechnikLogger.Techniker", it.message.toString()) } } } } } } binding.swipeRefreshLayout.apply { setProgressBackgroundColorSchemeResource(R.color.refreshLayoutBackground) setColorSchemeResources(R.color.refreshLayoutArrow) setOnRefreshListener { isRefreshing = false showAnimation(true) loadMembers() } } return root } private fun loadMembers() { memberNames.clear() binding.list.adapter = ArrayAdapter( myContext, android.R.layout.simple_list_item_1, memberNames ) ParseController.fetchMembers { members, memberNames, e -> if (e == null) { val adapter = ArrayAdapter( myContext, android.R.layout.simple_list_item_1, memberNames ) binding.list.adapter = adapter showAnimation(false) binding.list.setOnItemClickListener { _, _, index, _ -> val dialogView = layoutInflater.inflate(R.layout.member_dialog, null) dialogView.findViewById(R.id.name).setText(memberNames[index]) dialogView.findViewById(R.id.admin).isChecked = members[index].admin MaterialDialog(myContext, BottomSheet(LayoutMode.WRAP_CONTENT)).show { title(text = "Techniker-Info") customView(0, dialogView, horizontalPadding = true) onDismiss { val view = it.view val newName = view.findViewById(R.id.name).text.toString() val newAdmin = view.findViewById(R.id.admin).isChecked val member = members[index] val adminChanged = newAdmin != member.admin val nameChanged = newName != member.name if (adminChanged || nameChanged) { member.apply { setAdmin(newAdmin) setName(newName) saveInBackground { if (it == null) { Toasty.success(myContext, "Gespeichert").show() if (nameChanged) { showAnimation(true) loadMembers() } } else { Toasty.error(myContext, "Fehler bei Speicherung").show() Log.e("TechnikLogger.Techniker", it.message.toString()) } } } } } negativeButton(text = "Entlassen") { val name = memberNames[index] MaterialDialog(myContext).show { title(text = "Entlassung") message(text = "Soll '$name' wirklich entlassen werden?") positiveButton(text = "Ja") { members[index].apply { retire() saveInBackground { if (it == null) { Toasty.success(myContext, "Gespeichert").show() showAnimation(true) loadMembers() } else { Toasty.error(myContext, "Fehler bei Speicherung").show() Log.e("TechnikLogger.Techniker", it.message.toString()) } } } } negativeButton(text = "Nein") } } } } } else { showAnimation(true, false) Toasty.error(myContext, "Abruf fehlgeschlagen", Toasty.LENGTH_SHORT).show() Log.e("TechnikLogger.TechVerw", e.message.toString()) } } } private fun showAnimation(show: Boolean, connected: Boolean = true) { val viewVisibility = if (show) View.VISIBLE else View.INVISIBLE val newSpeed = if (!connected) 1.2f else 1.5f val animation = if (connected) "loading.json" else "no-connection.json" binding.apply { loadingAnimation.apply { setAnimation(animation) speed = newSpeed visibility = viewVisibility playAnimation() } } } }