package com.ydl.confide.home

import android.Manifest
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.DialogFragment
import com.blankj.utilcode.constant.PermissionConstants
import com.blankj.utilcode.util.PermissionUtils
import com.ydl.confide.R
import com.ydl.confide.databinding.DialogConfidePermissionBinding
import com.ydl.ydlcommon.view.dialog.CommonDialog

class ConfidePermissionDialog : DialogFragment() {

    var callback: ((Boolean) -> Unit)? = null

    private lateinit var binding: DialogConfidePermissionBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val granted = PermissionUtils.isGranted(Manifest.permission.RECORD_AUDIO)
        if (granted) {
            callback?.invoke(true)
            dismissAllowingStateLoss()
        }
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        binding = DataBindingUtil.inflate(inflater, R.layout.dialog_confide_permission, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        binding.ivClose.setOnClickListener {
            reject()
        }

        binding.tvBtn.setOnClickListener {
            PermissionUtils
                .permission(PermissionConstants.MICROPHONE)
                .callback(object : PermissionUtils.FullCallback {
                    override fun onGranted(permissionsGranted: MutableList<String>?) {
                        callback?.invoke(true)
                        dismissAllowingStateLoss()
                    }

                    override fun onDenied(permissionsDeniedForever: MutableList<String>?, permissionsDenied: MutableList<String>?) {
                        reject()
                    }
                }).request()
        }
    }

    private fun reject() {
        dismissAllowingStateLoss()
        CommonDialog(context)
            .setMessage("由于您尚未同意获取麦克风权限，本次通话将使用传统电话方式拨打")
            .setRightClick("确定") {
                callback?.invoke(false)
            }
            .setCancelAble(false)
            .show()
    }

    override fun onStart() {
        super.onStart()
        isCancelable = false
        val width = (resources.displayMetrics.widthPixels * 0.85).toInt()
        dialog?.window?.setLayout(width, ViewGroup.LayoutParams.WRAP_CONTENT)
        dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    }
}