package com.tommasoberlose.anotherwidget.components

import android.content.Context
import android.view.LayoutInflater
import androidx.core.view.isVisible
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.tommasoberlose.anotherwidget.R
import com.tommasoberlose.anotherwidget.databinding.BottomSheetDialogBinding

typealias DialogCallback = () -> Unit

class MaterialBottomSheetDialog(
    context: Context,
    private val title: String? = null,
    private val message: String? = null
) : BottomSheetDialog(context, R.style.BottomSheetDialogTheme) {

    private var positiveButtonLabel: String? = null
    private var negativeButtonLabel: String? = null
    private var positiveCallback: DialogCallback? = null
    private var negativeCallback: DialogCallback? = null

    private var binding = BottomSheetDialogBinding.inflate(LayoutInflater.from(context))

    fun setPositiveButton(label: String? = context.getString(android.R.string.ok), callback: DialogCallback? = null): MaterialBottomSheetDialog {
        positiveButtonLabel = label
        positiveCallback = callback
        return this
    }

    fun setNegativeButton(label: String? = context.getString(android.R.string.cancel), callback: DialogCallback? = null): MaterialBottomSheetDialog {
        negativeButtonLabel = label
        negativeCallback = callback
        return this
    }

    override fun show() {
        // Header
        binding.title.isVisible = title != null
        binding.title.text = title ?: ""

        binding.message.isVisible = message != null
        binding.message.text = message ?: ""

        binding.actionPositive.isVisible = positiveButtonLabel != null
        binding.actionPositive.text = positiveButtonLabel ?: ""
        binding.actionPositive.setOnClickListener {
            positiveCallback?.invoke()
            this.dismiss()
        }

        binding.actionNegative.isVisible = negativeButtonLabel != null
        binding.actionNegative.text = negativeButtonLabel ?: ""
        binding.actionNegative.setOnClickListener {
            negativeCallback?.invoke()
            this.dismiss()
        }

        setContentView(binding.root)
        super.show()
    }

}