package com.sybotan.android.demo.activities

import android.Manifest
import android.app.AlertDialog
import android.app.ProgressDialog
import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.Button
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.app.ActivityCompat
import androidx.lifecycle.lifecycleScope
import com.framework.mvvm.model.vo.AdmRequest
import com.framework.mvvm.mv.AdmViewModel
import com.sybotan.android.demo.R
import com.sybotan.android.demo.activities.poc.SceneActivity
import com.sybotan.android.demo.activities.poc.SpaceActivity
import com.sybotan.android.demo.bean.AutoUpDateBean
import com.sybotan.android.demo.tools.CommonUtils
import com.sybotan.android.demo.tools.DownLoadApk
import com.sybotan.android.demo.tools.LocalDataOperation
import com.sybotan.android.demo.tools.ToastUtils
import com.sybotan.android.demo.viewmodel.GraphyVM
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.jetbrains.anko.startActivity
import org.kodein.di.DI
import org.kodein.di.DIAware
import org.kodein.di.android.closestDI
import org.kodein.di.android.x.viewmodel.viewModel
import org.kodein.di.instance

class PocActivity : BaseActivity(), DIAware {

    override val di: DI by closestDI()

    private val mVm: AdmViewModel by viewModel()
    private val sp: SharedPreferences by instance()
    private var autoUpDateBean: AutoUpDateBean.Content? = null

    private val REQUEST_EXTERNAL_STORAGE = 1 // 不可改

    private lateinit var downloadBtn: Button

    private lateinit var uploadBtn: Button

    private lateinit var frontBtn: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_poc)
        checkStoragePermission()
        downloadBtn = findViewById(R.id.downloadBtn)
        uploadBtn = findViewById(R.id.uploadBtn)
        frontBtn = findViewById(R.id.frontBtn)

        downloadBtn.setOnClickListener {
            mVm.downloadBuilding(sp) {
                // ToastUtils.showMyToast("下载完成")
                val builder = AlertDialog.Builder(this)
                val dialog= builder.setMessage("建筑数据下载成功")
                    .setPositiveButton("确定") { dialog, id ->
                        dialog.dismiss()
                    }.create()
                dialog.show()
            }
        }

        uploadBtn.setOnClickListener {
            lifecycleScope.launch(Dispatchers.IO) {
                LocalDataOperation.getInstance().offlineSendRequest.uploadImageNew(this@PocActivity)
            }
            mVm.uploadBuilding {
                // ToastUtils.showMyToast("建筑数据上传成功")
                val builder = AlertDialog.Builder(this)
                val dialog= builder.setMessage("建筑数据上传成功")
                    .setPositiveButton("确定") { dialog, id ->
                        dialog.dismiss()
                    }.create()
                dialog.show()
            }
        }

        frontBtn.setOnClickListener {
            mVm.requestFrameAndDict(
                AdmRequest(
                    userId = "bdtp",
                    projectId = "Pj0002220011",
                    groupCode = "BR"
                )
            ) {
                val builder = AlertDialog.Builder(this)
                val dialog= builder.setMessage("框架数据和数据字典下载成功")
                    .setPositiveButton("确定") { dialog, id ->
                        dialog.dismiss()
                    }.create()
                dialog.show()
            }
        }
        val spaceCL = findViewById<ConstraintLayout>(R.id.spaceCL)
        spaceCL.setOnClickListener {
            startActivity<SpaceActivity>()
        }

        val sceneCL = findViewById<ConstraintLayout>(R.id.sceneCL)
        sceneCL.setOnClickListener {
            startActivity<SceneActivity>()
        }

//        mVm.requestBuilding(
//            AdmRequest(
//                userId = "bdtp",
//                projectId = "Pj0002220011",
//                groupCode = "BR",
//                buildingId = "Bd0002220002bcaa181bd406439c9ecaddac13b0d543"
//            )
//        )
        val viewModel = GraphyVM(this.application, { name, params ->
            when (name) {
                GraphyVM.UPDATE_APP -> {
                    autoUpDateBean = params as AutoUpDateBean.Content
                    if (!CommonUtils.IsNull(autoUpDateBean)
                        && Integer.valueOf(autoUpDateBean!!.getBuild()) > Integer.valueOf(
                            CommonUtils.getVersionMsg(this).get(0)
                        )
                    ) { //需要更新
                        downUrl(
                            "https://edition.persagy.com/api/download/getByParams/app/saas-version-app/Spring/MVC/entrance/unifier/download?resource="
                                    + autoUpDateBean!!.getDownloadUrl(),
                            autoUpDateBean!!.getBuild()
                        )
                    }
                }
            }
        }, this@PocActivity, "", "", "")
        viewModel.queryAutoUpdate();
    }

    fun downUrl(url: String?, build: String?) {
        val dialog = ProgressDialog(this@PocActivity)
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
        dialog.setCancelable(false)
        dialog.show()
        Thread(DownLoadApk(dialog, url, this@PocActivity, build)).start()
    }

    private fun checkStoragePermission() {
//        ActivityCompat.requestPermissions(
//            this, arrayOf(
//                Manifest.permission.READ_EXTERNAL_STORAGE,
//                Manifest.permission.WRITE_EXTERNAL_STORAGE
//            ),
//            REQUEST_EXTERNAL_STORAGE
//        )
        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                this,
                arrayOf(
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_PHONE_STATE
                ),
                1
            )
        }
    }
}