package com.cr.widget

import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import com.cr.cruav.R
import com.cr.data.CrUtil
import com.cr.data.FontManager

/**
 * 操作系统：MAC系统
 * 创建者：王成
 * 创建日期：2023/4/14 16:13
 * 描述：通用按钮
 */
class CrButton @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : CrLinearLayoutWidget(context, attrs, defStyleAttr) ,View.OnClickListener{
    /**
     * 对外接口
     */
    interface OnClickListener{
        fun onClick(view: View)
    }
    private var lblIco: TextView? = null
    private var lblTitle: TextView? = null
    private var btnPanel:LinearLayout ?= null

    private var listener:OnClickListener?= null

    /**
     * 初始化
     */
    init {
        // todo: 2023/4/14 初始化视图
        initView(R.layout.wg_button)
        // todo: 2023/4/14 挂接组件
        joinControls()
        // todo: 2023/4/14 初始化属性
        initProperty(attrs!!)
    }

    /**
     * 重写挂接组件方法
     */
    override fun joinControls() {
        super.joinControls()
        lblIco = findViewById(R.id.wg_button_ico)
        btnPanel = findViewById(R.id.wg_button_panel)
        lblTitle = findViewById(R.id.wg_button_title)
        // todo: 2023/4/14 设置监听
        btnPanel?.setOnClickListener(this)
    }

    /**
     * 重写属性初始化
     * @param attrs AttributeSet
     */
    override fun initProperty(attrs: AttributeSet) {
        val attributes = context.obtainStyledAttributes(attrs, R.styleable.ViewButton)
        if (attributes != null) {
            // todo: 2023/4/14  设置标题
            val strTitle = attributes.getString(R.styleable.ViewButton_crTitle)
            lblTitle!!.text = strTitle
            // todo: 2023/4/14  设置图标
            val strICO = attributes.getString(R.styleable.ViewButton_crLeftResource)
            if(strICO != null){
                FontManager.setTextView(context, lblIco!!, strICO!!)
            }
            // todo: 2023/4/17 设置背景
            val iBackResource = attributes.getDrawable(R.styleable.ViewButton_crClickGround)
            if (iBackResource != null){
                btnPanel?.background  = iBackResource
            }
            // todo: 2023/4/14  设置属性生效
            attributes.recycle()
        }
    }

    /**
     * 覆写视图点击事件
     * @param p0 View
     */
    override fun onClick(p0: View?) {
        if(listener != null) listener?.onClick(mainView!!)
    }

    /**
     * 拦截事件
     * @param ev MotionEvent
     * @return Boolean
     */
    override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        if (ev!!.actionMasked == MotionEvent.ACTION_DOWN) {
            val p = parent
            p?.requestDisallowInterceptTouchEvent(true)
        }
        return false
    }

    /**
     * 设置监听
     * @param listener OnClickListener 监听
     */
    fun setListener(listener: OnClickListener){
        this.listener = listener
    }
}