package com.ydl.ydlcommon.ui


import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.Window
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import com.ydl.ydlcommon.R
import kotlinx.android.synthetic.main.platform_fragment_loading_dialog.view.*


/**
 * A simple [Fragment] subclass.
 * Use the [LoadingDialogFragment2.newInstance] factory method to
 * create an instance of this fragment.
 */
class LoadingDialogFragment2 : DialogFragment() {

    private var msg: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        msg = arguments?.getString(ARG_MSG)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        dialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)
        return inflater.inflate(R.layout.platform_fragment_loading_dialog2, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        startAnim(view)
        if (!TextUtils.isEmpty(msg)) {
            view.tvMsg.text = msg
        } else {
            view.tvMsg.visibility = View.GONE
        }
    }

    override fun onStart() {
        super.onStart()
        dialog?.window?.setBackgroundDrawable(null)
        val dp100 = (resources.displayMetrics.density * 100).toInt()
        dialog?.window?.setLayout(dp100, dp100)
        dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    }

    private fun startAnim(view: View) {
        val ivLoading = view.findViewById<View>(R.id.ivLoading)
        val anim = ObjectAnimator.ofFloat(ivLoading, "rotation", 0F, 360F)
        anim.duration = 1000
        anim.repeatMode = ValueAnimator.RESTART
        anim.repeatCount = ValueAnimator.INFINITE
        anim.start()
    }

    companion object {
        private val ARG_MSG = "arg_msg"

        /**
         * Use this factory method to create a new instance of
         * this fragment using the provided parameters.
         *
         * @param msg 要显示的信息.
         * @return  LoadingDialogFragment 实例
         */
        fun newInstance(msg: String?): LoadingDialogFragment2 {
            val fragment = LoadingDialogFragment2()
            val args = Bundle()
            args.putString(ARG_MSG, msg)
            fragment.arguments = args
            return fragment
        }
    }

    override fun show(manager: FragmentManager, tag: String?) {
        try {
            //在每个add事务前增加一个remove事务,防止连续的add
            manager.beginTransaction().remove(this).commitAllowingStateLoss()
            super.show(manager, tag)
        } catch (e: Exception) {
            //同一实例使用不同的tag会异常,这里捕获一下
            e.printStackTrace()
        }
    }

    fun hide() {
        dismissAllowingStateLoss()
    }
}