package com.cyb3rko.techniklogger.modals import android.content.DialogInterface import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.cyb3rko.techniklogger.data.objects.Member import com.cyb3rko.techniklogger.databinding.MemberDialogBinding import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.dialog.MaterialAlertDialogBuilder internal class MemberBottomSheet( private val member: Member? = null, private val action: (member: Member?) -> Unit ): BottomSheetDialogFragment() { private lateinit var binding: MemberDialogBinding private var mode = -1 private lateinit var mMember: Member override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { binding = MemberDialogBinding.inflate(layoutInflater) if (member == null) { mode = MODE_ADD } else { mMember = member.copy() binding.name.setText(mMember.name) binding.admin.isChecked = mMember.admin mode = MODE_EDIT } if (mode == MODE_ADD) { binding.title.text = "Techniker hinzufügen" binding.button.text = "Hinzufügen" } else { binding.title.text = "Techniker-Info" binding.button.text = "Entlassen" } binding.button.setOnClickListener { val newName = binding.name.text.toString() val newAdmin = binding.admin.isChecked if (mode == MODE_ADD) { Member().apply { setAdmin(newAdmin) setName(newName) action(this) dismiss() } } else { MaterialAlertDialogBuilder(requireContext()) .setTitle("Entlassung") .setMessage("Soll '${mMember.name}' wirklich entlassen werden?") .setPositiveButton("Ja") { _ , _ -> mMember.apply { retire() action(this) dismiss() } } .setNegativeButton("Nein", null) .show() } } return binding.root } override fun onDismiss(dialog: DialogInterface) { if (mode == MODE_EDIT && ::binding.isInitialized) { val newName = binding.name.text.toString() val newAdmin = binding.admin.isChecked val adminChanged = newAdmin != mMember.admin val nameChanged = newName != mMember.name if (adminChanged || nameChanged) { mMember.apply { setAdmin(newAdmin) setName(newName) action(this) } } } } companion object { const val TAG = "Member Bottom Sheet" const val MODE_ADD = 0 const val MODE_EDIT = 1 } }