package com.ydl.ydlcommon.utils

import android.app.Activity
import android.app.Dialog
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import android.view.View
import android.view.ViewGroup
import com.ydl.ydlcommon.R
import com.ydl.ydlcommon.bean.VersionData
import com.yidianling.common.tools.RxDeviceTool
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import kotlinx.android.synthetic.main.platform_dialog_update_layout.*


/**
 * app升级
 * 兼容8.0系统
 */
class ApkUpdateDialog : Dialog{

    private var listener: ApkInstallTool.UpdateProgressListener? = null

    private var updateData : VersionData? = null

    private var activity : Activity? = null

    private var isCancleAble : Boolean = true

    private var apkIns : ApkInstallTool? = null

    private var Temp_Online_time = "2019-07-16 15:00:00" //假设是这个日期上线,为了弥补交互逗比需求

    constructor(activity: Activity?) : super(activity){
        this.activity = activity
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.platform_dialog_update_layout)

        tv_update_content.text = updateData?.title
        tv_update_content.setMovementMethod(ScrollingMovementMethod.getInstance());

        text_version.text = "v${updateData?.ver}"
        text_desc.text = updateData?.content
        text_desc.setMovementMethod(ScrollingMovementMethod.getInstance());

        v_downpress.setSize(28,14,6,9,4)
        v_downpress.setTextSize(10)
//        v_downpress.setProgress(0)

        listener = object : ApkInstallTool.UpdateProgressListener {
            override fun startLoad() {
                Observable.just(1)
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe({
                            tv_title.text = "新版本下载中"
                            text_version.visibility = View.GONE
                            tv_bottom_desc.text = "新版本正在努力更新中,请稍等"
                            lin_progress.visibility = View.VISIBLE
                            tv_confirm.visibility = View.GONE
                            lin_content.visibility = View.GONE
                            lin_sure.visibility = View.GONE
                        },{})
            }

            override fun progress(progress: Int) {
                Observable.just(1)
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe({
                            progress_bar.progress = progress
                            v_downpress.setProgress(progress)
                        },{})
            }
        }

        apkIns = ApkInstallTool()

        tv_confirm.setOnClickListener {
            //开始下载
            if(updateData?.installLink==null)return@setOnClickListener
            apkIns?.start(activity,updateData,listener)
        }

        if ("1" == updateData?.updateFlag){
            iv_close.visibility = View.GONE
        }else{
            iv_close.setOnClickListener {
                //取消下载
                apkIns?.cancleDown()
                if (tv_confirm.visibility == View.GONE){
                    //启动后台service下载
                    SystemDownloadFileUtil.getInstances(context).setUrl(updateData?.installLink).setVersion(updateData?.ver).start()
                }
                dismiss()
            }
        }
    }

    override fun onStart() {
        super.onStart()
        val padding = context.resources.getDimensionPixelSize(R.dimen.platform_default_dis_size_big)
        window.setLayout(
                RxDeviceTool.getScreenWidth(context) - padding, ViewGroup.LayoutParams.WRAP_CONTENT
        )
        window.setBackgroundDrawableResource(R.color.platform_transparent)
        setCancelable(isCancleAble)
        setCanceledOnTouchOutside(false)

    }
    fun setData(data : VersionData?): ApkUpdateDialog {
        updateData = data
        return this
    }

    /**
     * 是否允许取消
     */
    fun setCancle(cancleable : Boolean): ApkUpdateDialog {
        this.isCancleAble = cancleable
        return this
    }

    override fun show() {
        if (null == activity || activity!!.isFinishing){
            return
        }
        super.show()
    }
}