package com.base.appzxhy.ui.main

import android.graphics.Color
import android.view.LayoutInflater
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.base.appzxhy.R
import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.bean.HomeTabUIBean
import com.base.appzxhy.databinding.ActivityMainBinding
import com.base.appzxhy.databinding.ItemHomeTabBinding
import com.base.appzxhy.ui.vm.ShortPlayViewModel
import com.base.appzxhy.utils.LogEx
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
import com.gyf.immersionbar.ktx.immersionBar

class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {

    private lateinit var navController: NavController
    private val homeTabs by lazy {
        arrayOf(
            HomeTabUIBean(R.drawable.bg_selector_home, getString(R.string.home)),
            HomeTabUIBean(R.drawable.bg_selector_foryou, getString(R.string.for_you)),
            HomeTabUIBean(R.drawable.bg_selector_mylist, getString(R.string.my_list)),
            HomeTabUIBean(R.drawable.bg_selector_rewards, getString(R.string.rewards)),
            HomeTabUIBean(R.drawable.bg_selector_profile, "Profile"),
        )
    }
    val viewModel by lazy(LazyThreadSafetyMode.NONE) {
        ViewModelProvider(this)[ShortPlayViewModel::class.java]
    }


    override fun initView() {
        super.initView()
        navController = (supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment).navController

        navController.addOnDestinationChangedListener { controller, destination, arguments ->
            LogEx.logDebug(TAG, "addOnDestinationChangedListener")

            if (destination.id == R.id.homeFragment) {
                LogEx.logDebug(TAG, "addOnDestinationChangedListener homeFragment")
            }

        }

        initTab()

        viewModel.getPopularDrama()
        viewModel.getNewDrama()
    }

    private fun initTab() {
        homeTabs.forEachIndexed { index, homeTab ->
            val tab = binding.tabLayout.newTab()
            val view = LayoutInflater.from(this).inflate(R.layout.item_home_tab, null)
            val tabBinding = ItemHomeTabBinding.bind(view)
            tabBinding.ivIcon.setImageResource(homeTab.icon)
            tabBinding.tvTab.text = homeTab.tab
//            tabBinding.tvTab.setTextColor(ContextCompat.getColor(this, R.color.color_tab_home))
            tab.customView = tabBinding.root
            tab.id = index
            binding.tabLayout.addTab(tab)
        }
        binding.tabLayout.addOnTabSelectedListener(object : OnTabSelectedListener {
            override fun onTabSelected(tab: TabLayout.Tab?) {
                tab?.setSelected()
            }

            override fun onTabUnselected(tab: TabLayout.Tab?) {
                tab?.setUnselected()
            }

            override fun onTabReselected(tab: TabLayout.Tab?) {

            }
        })

        val defaultTab = binding.tabLayout.getTabAt(0)
        defaultTab?.select()
        defaultTab?.setSelected()
    }

    private fun naviFragment(id: Int) {
        when (id) {
            0 -> {
                if (navController.currentDestination?.id != R.id.homeFragment) {
                    navController.navigate(R.id.homeFragment)
                }
            }

            1 -> {
                navController.navigate(R.id.playSlideFragment)
            }

            2 -> {
                navController.navigate(R.id.myListFragment)
            }

            3 -> {
                navController.navigate(R.id.rewardsFragment)
            }

            4 -> {
                navController.navigate(R.id.profileFragment)
            }
        }
    }

    private fun showFragment(targetFragment: Fragment) {
        val transaction = supportFragmentManager.beginTransaction()
        // 隐藏所有Fragment
        for (fragment in supportFragmentManager.fragments) {
            transaction.hide(fragment)
        }
        // 显示当前需要显示的Fragment
        transaction.show(targetFragment)
        transaction.commit()
    }

    fun TabLayout.Tab.setUnselected() {
        val textView = customView?.findViewById<TextView>(R.id.tv_tab)
        LogEx.logDebug(TAG, "setUnselected ${textView?.text}")
        textView?.setTextColor(Color.parseColor("#A7A7A7"))
    }

    fun TabLayout.Tab.setSelected() {
        val textView = customView?.findViewById<TextView>(R.id.tv_tab)
        LogEx.logDebug(TAG, "setSelected ${textView?.text}")
        textView?.setTextColor(Color.parseColor("#FFFFFF"))
        naviFragment(this.id)
    }

    override fun configSystemBar() {
        immersionBar {
            statusBarColor("#00FFFFFF")
            statusBarDarkFont(false)
        }
    }

}