package com.yidianling.course.widget

import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.graphics.Paint
import androidx.constraintlayout.widget.ConstraintLayout
import android.text.TextUtils
import android.util.AttributeSet
import android.view.View
import com.alibaba.android.arouter.launcher.ARouter
import com.lzf.easyfloat.permission.PermissionUtils
import com.ydl.media.audio.AudioPlayer
import com.ydl.media.audio.model.Music
import com.ydl.media.view.PlayTypeEnum
import com.ydl.media.view.PlayerFloatHelper
import com.ydl.media.view.PlayerFloatView
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydlcommon.modular.ModularServiceManager.provide
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.yidianling.common.tools.RxImageTool
import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.api.IConsultantService
import com.yidianling.course.CourseConstants
import com.yidianling.course.R
import com.yidianling.course.bean.Course
import com.yidianling.course.constants.CourseBIConstants
import kotlinx.android.synthetic.main.item_course_new_list_view.view.*

/**
 * @author jiucheng
 * @描述:课程列表页改版后的itemView
 * @Copyright Copyright (c) 2018
 * @Company 壹点灵
 * @date 2019/8/13
 */
class CourseItemNewView : ConstraintLayout {
    private var mContext: Context
    private lateinit var course: Course
    private var statusListener: PlayerFloatView.FloatViewPlayListener? = null
    private var headUrl: String = ""
    private var doctorName: String = ""

    constructor(mContext: Context) : super(mContext) {
        this.mContext = mContext
        initView()
    }

    constructor(mContext: Context, attr: AttributeSet) : super(mContext, attr) {
        this.mContext = mContext
        initView()
    }


    fun initView() {
        View.inflate(mContext, R.layout.item_course_new_list_view, this)
        val params = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
        layoutParams = params
        setPadding(RxImageTool.dp2px(13f), 0, RxImageTool.dp2px(15f), 0)
    }

    @SuppressLint("SetTextI18n")
    fun setData(course: Course) {
        this.course = course
        if (!TextUtils.isEmpty(course.hostListPic)) {
            headUrl = course.hostListPic
        } else {
            if (course.courseHostInfo != null && !TextUtils.isEmpty(course.courseHostInfo.doctorHead)) {
                headUrl = course.courseHostInfo.doctorHead
            }
        }

        GlideApp.with(mContext)
            .load(headUrl)
            .into(iv_head)

        //活动标签
        if (course.joinActivity && !TextUtils.isEmpty(course.activityImg)) {
            img_activity.visibility = View.VISIBLE
            GlideApp.with(context).load(course.activityImg).into(img_activity)
            tv_title.text = "\u3000\u3000\u3000\u0020" + course.title
        } else {
            img_activity.visibility = View.GONE
            tv_title.text = course.title
        }

        if (!TextUtils.isEmpty(course.doctorName)) {
            doctorName = course.doctorName
        } else {
            if (course.courseHostInfo != null && !TextUtils.isEmpty(course.courseHostInfo.doctorName)) {
                doctorName = course.courseHostInfo.doctorName
            }
        }
        var info = ""
        if (!TextUtils.isEmpty(course.hostInfo)) {
            info = course.hostInfo
        } else {
            if (course.courseHostInfo != null && !TextUtils.isEmpty(course.courseHostInfo.title)) {
                info = course.courseHostInfo.title
            }
        }

        if (TextUtils.isEmpty(doctorName) || TextUtils.isEmpty(info)) {
            tv_doctor_info.text = "壹点灵课程精选讲师"
        } else {
            tv_doctor_info.text = "$doctorName · $info"
        }

        tv_course_info.text = "共${course.subCourseNum}讲"
        tv_course_num.text = "${course.joinNum}人已学"
        if (course.subCourseNum == 0) {
            tv_course_info.visibility = View.GONE
            view_line.visibility = View.GONE
        } else {
            tv_course_info.visibility = View.VISIBLE
            view_line.visibility = View.VISIBLE
        }

        if (course.isInvite == 0) {
            tv_fan_li.visibility = View.GONE
        } else {
            tv_fan_li.visibility = View.VISIBLE
        }

        if (course.newCourse == 1) {
            iv_new.visibility = View.VISIBLE
        } else {
            iv_new.visibility = View.GONE
        }

        if (course.recommend == 2) {
            iv_hot.visibility = View.VISIBLE
        } else {
            iv_hot.visibility = View.GONE
        }

        if (course.demoType == 0) {
            iv_play.visibility = View.GONE
        } else {
            iv_play.visibility = View.VISIBLE
        }

        iv_play.setOnClickListener {
            playMedia()

            ActionCountUtils.count(
                CourseBIConstants.CourseListEvent.POSITION_COURSE_LIST_AUDITION_CLICK,
                course.id
            )
        }

        tv_view_course.setOnClickListener {
            if (TextUtils.equals(course.courseType, "1") || TextUtils.equals(
                    course.courseType,
                    "7"
                ) || TextUtils.equals(course.courseType, "6")
            ) {
                ARouter.getInstance()
                    .build("/course/play")
                    .withInt("course_id", course.id.toInt())
                    .navigation()
            } else {
                val h5Params = H5Params(CourseConstants.COURSE_DETAIL_H5 + course.id, "课程详情")
                NewH5Activity.start(mContext, h5Params)
            }

            ActionCountUtils.count(CourseBIConstants.CourseListEvent.POSITION_COURSE_LIST_XXX_CLICK + course.id + "_click")
        }


        if (!TextUtils.isEmpty(course.applyFee)) {
            if (course.applyFee.contains(".")) {
                tv_price.text = course.applyFee.split(".")[0]
                tv_price_decimal.text = "." + course.applyFee.split(".")[1]
            } else {
                tv_price.text = course.applyFee
                tv_price_decimal.text = ".00"
            }
        }

        if (TextUtils.equals("1", course.isPromotion) || TextUtils.equals(
                "3",
                course.isPromotion
            )
        ) {
            tv_cu_xiao.visibility = View.VISIBLE
            if (TextUtils.equals("1", course.isPromotion)) {
                if (course.promotionApplyFee.contains(".")) {
                    tv_price.text = course.promotionApplyFee.split(".")[0]
                    tv_price_decimal.text = "." + course.promotionApplyFee.split(".")[1]
                } else {
                    tv_price.text = course.promotionApplyFee
                    tv_price_decimal.text = ".00"
                }
            }
        } else {
            tv_cu_xiao.visibility = View.GONE
        }

        if (course.isBuy) {
            tv_view_course.visibility = View.VISIBLE
            if (TextUtils.equals(course.courseType, "1") || TextUtils.equals(
                    course.courseType,
                    "7"
                ) || TextUtils.equals(course.courseType, "6")
            ) {
                tv_view_course.text = "立即听课"
            } else {
                tv_view_course.text = "查看课程"
            }


            tv_original_price.visibility = View.GONE
            tv_price_si.visibility = View.GONE
            tv_price.visibility = View.GONE
            tv_price_decimal.visibility = View.GONE
        } else {
            tv_view_course.visibility = View.GONE

            tv_original_price.visibility = View.VISIBLE
            tv_price_si.visibility = View.VISIBLE
            tv_price.visibility = View.VISIBLE
            tv_price_decimal.visibility = View.VISIBLE


            if (TextUtils.isEmpty(course.originalApplyFee) || TextUtils.equals(
                    course.originalApplyFee,
                    "0"
                ) || TextUtils.equals(
                    course.originalApplyFee,
                    "0.0"
                ) || TextUtils.equals(course.originalApplyFee, "0.00")
            ) {
                tv_original_price.visibility = View.GONE
            } else {
                tv_original_price.visibility = View.VISIBLE
            }
            tv_original_price.text = "¥" + course.originalApplyFee
            tv_original_price.paint.flags = Paint.STRIKE_THRU_TEXT_FLAG

        }
    }


    fun setGuideData(pic: String, location: String) {
        view_bottom_line.visibility = View.INVISIBLE
        iv_guide_image.visibility = View.VISIBLE

        GlideApp.with(mContext)
            .load(pic)
            .into(iv_guide_image)

        iv_guide_image.setOnClickListener {
            provide(IConsultantService::class.java).jumpConsultAssistant(
                mContext as Activity,
                location.toInt()
            )
        }
    }


    fun setGuideGone(){
        iv_guide_image.visibility = View.GONE
    }


    fun isGuideVisible(): Boolean {
        return iv_guide_image.visibility == View.VISIBLE
    }


    private fun playMedia() {
        if (PlayerFloatHelper.isShow()) {
            PlayerFloatHelper.removeResetView()
        } else {
            PlayerFloatHelper.removeView()
        }

        val music = Music()
        music.title = course.title
        music.artist = doctorName
        music.coverPath = if (!TextUtils.isEmpty(course.image)) course.image else course.pic
        PlayerFloatHelper.isCanClick = false


        if (course.demoType == 1) {
            music.path = course.demoFile

            val hashMap = HashMap<String, String>()
            PlayerFloatHelper.playTempData.clear()
            hashMap["course_id"] = course.id.toString()
            AudioPlayer.get().singlePlay(music)
            PlayerFloatHelper.show(
                mContext,
                playTypeEnum = PlayTypeEnum.PLAY_TYPE_COURSE,
                playData = hashMap
            )
            VideoFloatHelper.dismissFloat(mContext as Activity)
        }
        if (course.demoType == 2) {
            VideoFloatHelper.setVideoInfo(
                course.id.toString(),
                course.demoFile,
                false
            )
            checkPermission()

            if (PlayerFloatHelper.isShow()) {
                PlayerFloatHelper.removeResetView()
            }
        }


        if (statusListener == null) {
            statusListener = object : PlayerFloatView.FloatViewPlayListener {
                override fun onStartClick() {
                }

                override fun onPlayFinish() {
                    PlayerFloatHelper.removeResetView()
                }

                override fun onPauseClick() {
                }

            }
            PlayerFloatHelper.addClickListener(statusListener as PlayerFloatView.FloatViewPlayListener)
        }
    }


    fun setBottomLineGone() {
        view_bottom_line.visibility = View.INVISIBLE
    }

    fun setBottomLineVisible() {
        view_bottom_line.visibility = View.VISIBLE
    }

    fun hideListenerButton() {
        tv_view_course.visibility = View.GONE
    }

    /**
     * 检测浮窗权限是否开启，若没有给与申请提示框（非必须，申请依旧是EasyFloat内部内保进行）
     */
    private fun checkPermission() {
        if (PermissionUtils.checkPermission(mContext)) {

            VideoFloatHelper.showVideoFloat(mContext as Activity)
        } else {
            AlertDialog.Builder(mContext)
                .setMessage("使用浮窗功能，需要您授权悬浮窗权限。")
                .setPositiveButton("去开启") { _, _ ->
                    VideoFloatHelper.showVideoFloat(mContext as Activity)
                }
                .setNegativeButton("取消") { _, _ ->
                    ToastUtil.toastLong(
                        mContext,
                        "App正常工作需要内部存储使用权限，请开启"
                    )
                }
                .show()
        }
    }
}