package com.yidianling.home.adapter

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.yidianling.home.R
import com.yidianling.home.constract.YdlHomeViewHolderConstract
import com.yidianling.home.event.HomeImpl
import com.yidianling.home.event.IHomeBaseEvent
import com.yidianling.home.event.IHomeEvent
import com.yidianling.home.model.bean.*
import com.yidianling.home.ui.view.*

/**
 * @author <a href="https://www.jianshu.com/u/c1e5310dd724">xujian</a>
 * @描述: 壹点零首页适配器
 * @Copyright Copyright (c) 2019
 * @Company 壹点灵
 * @date 2019/02/13
 */
class YdlHomeAdapter(private val mContext: Context,
                     private var homeEvent: HomeImpl,
                     private var list: ArrayList<HomePagerDataBean>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    private val mInflater: LayoutInflater = LayoutInflater.from(mContext)
    /**
     * 倾述item的position
     *
     */
    private var confidePosition = -1

    /**
     * 咨询条目 position
     */
    private var consultPosition = -1

    /**
     * 倾述模块中tab上次选中的下标
     */
    var confideSelectPosition = 0

    /**
     * 咨询模块中tab上次选中的下标
     */
    var consultSelectPosition = 0

    /**
     * 倾诉分类 缓存
     */
    var listenCategoryDate: List<HomeHeaderBean.ListenCategoryDateBean>? = null

    /**
     * 咨询分类 缓存
     */
    var consultCategoryData: List<HomeHeaderBean.ConsultCategoryDateBean>? = null

    fun updateItems(list: MutableList<HomePagerDataBean>) {
        if (null == this.list || this.list!!.isEmpty()) {
            this.list = ArrayList()
        } else {
            this.list.clear()
        }
        this.list.addAll(list)
        //重置标记位
        confidePosition = -1
        consultPosition = -1
        notifyDataSetChanged()
    }

    /**
     * 更新倾诉模块数据
     */
    fun updateConfideData(data: HomeConfideBean, selectPosition: Int) {
        if (confidePosition == -1) {
            return
        }
        list[confidePosition].confideBean = data
        this.confideSelectPosition = selectPosition
        notifyItemChanged(confidePosition)
    }

    /**
     * 更新咨询模块数据
     */
    fun updateConsultData(data: HomeConsultBean, selectPosition: Int) {
        if (consultPosition == -1) {
            return
        }
        list[consultPosition].consultBean = data
        this.consultSelectPosition = selectPosition
        notifyItemChanged(consultPosition)
    }

    /**
     * 更新问答模块数据
     */
    fun updateAskData(data: HomeAskBean, position: Int) {
        list[position].askBean = data
//        notifyItemChanged(position)
    }

    override fun getItemViewType(position: Int): Int {
        if (position < list.size) {
            return list[position].type!!
        } else {
            return YdlHomeViewHolderConstract.FOOTER_VIEW
        }
    }


    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
        when (viewType) {
            //顶部ViewPager与分类模块
            YdlHomeViewHolderConstract.PAGER_BANNER_VIEW -> {
                return HomePagerBannerViewHolder(HomePagerBannerView(mContext, homeEvent))
            }
            //咨询模块
            YdlHomeViewHolderConstract.CONSULT_VIEW -> {
                return HomeConsultViewHolder(HomeConsultView(mContext, homeEvent))
            }
            //顶部预约专家,即时倾诉,心理测试按钮模块
            YdlHomeViewHolderConstract.BUTTON_BANNER_VIEW -> {
                return HomeButtonBannerViewHolder(HomeButtonBannerView(mContext, homeEvent))
            }
            //倾诉*排解模块
            YdlHomeViewHolderConstract.CONFIDE_VIEW -> {
                return HomeConfideViewHolder(HomeConfideView(mContext, homeEvent))
            }
            //课程*成长模块
            YdlHomeViewHolderConstract.COURSE_VIEW -> {
                return HomeCourseViewHolder(HomeCourseView(mContext, homeEvent))
            }
            //解忧*问答模块
            YdlHomeViewHolderConstract.ASSUAGE_GRIEF_VIEW -> {
                return HomeAssuageGriefViewHolder(HomeAssuageGriefView(mContext, homeEvent))
            }
            //测试模块
            YdlHomeViewHolderConstract.TEST_VIEW -> {
                return HomeTestViewHolder(HomeTestView(mContext, homeEvent))
            }
            //心灵*电台模块
            YdlHomeViewHolderConstract.INTELLIGENT_VIEW -> {
                return HomeIntelligentViewHolder(HomeIntelligentView(mContext, homeEvent))
            }
            //文章*阅读模块
            YdlHomeViewHolderConstract.ARTICLE_VIEW -> {
                return HomeArticleViewHolder(HomeArticleView(mContext, homeEvent))
            }
            //壹点*冥想模块
            YdlHomeViewHolderConstract.MUSE_VIEW -> {
                return HomeMuseViewHolder(HomeMuseView(mContext, homeEvent))
            }
            //底部提示语模块
            else -> {
                val view = mInflater.inflate(R.layout.home_footer_view, parent, false)
                return FooterViewViewHolder(view)
            }
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when (holder) {
            //顶部ViewPager与分类模块
            is HomePagerBannerViewHolder -> {
                var headerBean = list[position].headerBean;
                this.consultCategoryData = headerBean?.consultCategoryData
                this.listenCategoryDate = headerBean?.listenCategoryDate
                holder.pagerBannerView.initData(headerBean)
            }
            //顶部预约专家,即时倾诉,心理课堂,心理测试按钮模块
            is HomeButtonBannerViewHolder -> {
            }
            //咨询模块
            is HomeConsultViewHolder -> {
                holder.consultView.setTitle(this.consultCategoryData, consultSelectPosition)
                holder.consultView.setConsultInfoView(list[position].consultBean?.list,this.consultCategoryData?.get(consultSelectPosition))
                consultPosition = position
            }
            //倾诉*排解模块
            is HomeConfideViewHolder -> {
                holder.confideViewView.setTitle(this.listenCategoryDate, confideSelectPosition)
                holder.confideViewView.setConfideExpertInfoView(list[position].confideBean?.body)
                confidePosition = position
            }
            //课程*成长模块
            is HomeCourseViewHolder -> {
                holder.courseViewView.initData(list[position].courseBean?.list)
            }
            //解忧*问答模块
            is HomeAssuageGriefViewHolder -> {
                holder.assuageGriefViewView.initData(position,list[position].askBean?.data)
            }
            //壹点*冥想模块
            is HomeMuseViewHolder -> {
                holder.museViewView.initData(list[position].museBean)
            }
            //心灵*电台模块
            is HomeIntelligentViewHolder -> {
                holder.intelligentViewView.initData(list[position].fmBean?.list)
            }
            //文章*阅读模块
            is HomeArticleViewHolder -> {
                holder.articleViewView.initData(list[position].articleBean?.list)
            }
            //测试模块
            is HomeTestViewHolder -> {
                holder.testView.initData(list[position].testListBean)
            }
        }
    }

    override fun getItemCount(): Int {
        return list.size
    }

    /**
     * 顶部ViewPager与分类模块 ViewHolder
     */
    inner class HomePagerBannerViewHolder(val pagerBannerView: HomePagerBannerView) : RecyclerView.ViewHolder(pagerBannerView)

    /**
     * 顶部预约专家,即时倾诉,心理测试按钮模块 ViewHolder
     */
    inner class HomeButtonBannerViewHolder(val buttonBannerView: HomeButtonBannerView) : RecyclerView.ViewHolder(buttonBannerView)

    /**
     * 咨询模块 ViewHolder
     */
    inner class HomeConsultViewHolder(val consultView: HomeConsultView) : RecyclerView.ViewHolder(consultView)

    /**
     * 倾诉*排解模块 ViewHolder
     */
    inner class HomeConfideViewHolder(val confideViewView: HomeConfideView) : RecyclerView.ViewHolder(confideViewView)

    /**
     * 课程*成长模块 ViewHolder
     */
    inner class HomeCourseViewHolder(val courseViewView: HomeCourseView) : RecyclerView.ViewHolder(courseViewView)

    /**
     * 测试模块 ViewHolder
     */
    inner class HomeTestViewHolder(val testView: HomeTestView) : RecyclerView.ViewHolder(testView)

    /**
     * 解忧*问答模块 ViewHolder
     */
    inner class HomeAssuageGriefViewHolder(val assuageGriefViewView: HomeAssuageGriefView) : RecyclerView.ViewHolder(assuageGriefViewView)

    /**
     * 心灵*电台模块 ViewHolder
     */
    inner class HomeIntelligentViewHolder(val intelligentViewView: HomeIntelligentView) : RecyclerView.ViewHolder(intelligentViewView)

    /**
     * 文章*阅读模块 ViewHolder
     */
    inner class HomeMuseViewHolder(val museViewView: HomeMuseView) : RecyclerView.ViewHolder(museViewView)

    /**
     * 文章*阅读模块 ViewHolder
     */
    inner class HomeArticleViewHolder(val articleViewView: HomeArticleView) : RecyclerView.ViewHolder(articleViewView)

    /**
     * 底部提示语模块 ViewHolder
     */
    inner class FooterViewViewHolder(val footerView: View) : RecyclerView.ViewHolder(footerView)
}