package com.atmob.keyboard_android.component.base

import android.content.Context
import android.util.AttributeSet

/**
 * 带路由功能的组件
 */
class RouteComponent @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : GroupComponent(context, attrs, defStyleAttr) {
    /**
     * 路由切换子组件，也就是先隐藏掉所有兄弟组件，再显示自己
     *
     * @param mutex 是否互斥，如果为true，则会隐藏其他子组件后，再显示自己，为false则是不隐藏兄弟组件，直接显示自己
     */
    fun <T : IUIComponent> routeChildComponent(
        targetComponentClass: Class<T>,
        mutex: Boolean = false
    ) {
        // 获取所有直接子组件
        val directChildComponentList = getDirectChildComponentList()

        // 找到目标组件
        val targetComponent: IUIComponent? = directChildComponentList.find {
            // 检查当前子View，是否是目标类型
            targetComponentClass.isInstance(it)
        }

        if (targetComponent != null) {
            // 找到兄弟组件
            if (mutex) {
                val siblingComponentList = directChildComponentList.filter {
                    !targetComponentClass.isInstance(it)
                }.toList()
                // 先隐藏所有兄弟
                siblingComponentList.forEach {
                    it.hide()
                }
            }
            // 将自己的层级，移动到父View的最顶层，从而覆盖住兄弟组件
            targetComponent.asView().parent.bringChildToFront(targetComponent.asView())
            // 再显示自己
            targetComponent.show()
        }
    }
}