package com.base.scanqr.ui.product

import android.content.ActivityNotFoundException
import android.content.Intent
import android.net.Uri
import android.widget.Toast
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.lifecycle.ViewModelProvider
import com.base.scanqr.R
import com.base.scanqr.ads.AdsMgr
import com.base.scanqr.ads.AdsShowCallBack
import com.base.scanqr.base.BaseActivity
import com.base.scanqr.bean.FunctionUIBean
import com.base.scanqr.bean.ProductUIBean
import com.base.scanqr.databinding.ActivityProductCodeBinding
import com.base.scanqr.ui.vm.QrViewModel
import com.base.scanqr.ui.widget.InputNameDialog.showInputNameDialog
import com.base.scanqr.utils.BarUtils
import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentShareImage
import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.QRCodeUtils.generateEAN13Barcode
import com.base.scanqr.utils.SpJsonUtils
import com.base.scanqr.utils.ToastUtils.toast
import com.google.gson.Gson
import java.io.File

/**
 * https://juejin.cn/post/6844904163755687944
 * EAN-13 格式
 */
class ProductCodeActivity : BaseActivity<ActivityProductCodeBinding>(ActivityProductCodeBinding::inflate) {

    private var productUIBean = ProductUIBean()
    private var qrString: String = ""
    private var tempImagePath: String = ""

    private val viewModel by lazy(LazyThreadSafetyMode.NONE) {
        ViewModelProvider(this)[QrViewModel::class.java]
    }

    override fun onResumeOneShoot() {
        super.onResumeOneShoot()
        val flag = changeLanguage()
        if (flag) return

        AdsMgr.showBanner(binding.flBanner, false)
    }

    override fun initView() {
        super.initView()
        binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
        AdsMgr.showNative(binding.flAd, R.layout.layout_admob_item)

        val data = intent.extras?.getString("data")
        data?.let {
            productUIBean = Gson().fromJson(data, ProductUIBean::class.java)
            qrString = productUIBean.content
            binding.tvContent.text = productUIBean.content
        }

        Thread {
            val bitmap = generateEAN13Barcode(qrString, 648, 255)
            runOnUiThread {
                binding.ivQr.setImageBitmap(bitmap)
                val file = File(cacheDir, System.currentTimeMillis().toString() + ".jpg")
                bitmap?.let {
                    val flag = saveBitmapToFile(it, file.absolutePath)
                    LogEx.logDebug(TAG, "flag=$flag tempImage=${file.absolutePath}")
                    if (flag) {
                        tempImagePath = file.absolutePath
                    }
                }
                if (productUIBean.needCreate) {
                    productUIBean.needCreate = false
                    SpJsonUtils.addJsonBean<ProductUIBean>(FunctionUIBean.KEY_PRODUCT, productUIBean)
                }
            }
        }.start()

    }

    override fun initListener() {
        super.initListener()
        onBackPressedDispatcher.addCallback {
            AdsMgr.showInsert(this@ProductCodeActivity, false, object : AdsShowCallBack() {
                override fun close(where: Int) {
                    finishToMainTop()
                }

                override fun failed(where: Int) {
                    finishToMainTop()
                }

                override fun googleFailed(where: Int) {
                    finishToMainTop()
                }
            })
        }
        binding.flBack.setOnClickListener {
            onBackPressedDispatcher.onBackPressed()
        }
        binding.llShare.setOnClickListener {
            val intent = intentShareImage(this, qrString)
            runCatching {
                startActivity(intent)
            }
        }
        binding.llDownload.setOnClickListener {
            kotlin.runCatching {
                val newName = File(qrString).name
                showInputNameDialog(newName) { name ->
                    viewModel.copyFileToDownloads(this, name, tempImagePath)
                }
            }
        }
        binding.llCopy.setOnClickListener {
            copyText(TAG, productUIBean.content)
            toast("Copied to clipboard", true)
        }
        binding.flSearch.setOnClickListener {

            val intent = Intent(Intent.ACTION_VIEW)
            intent.setData(Uri.parse("https://www.google.com/search?q=${productUIBean.content}"))

            try {
                startActivity(intent)
            } catch (e: ActivityNotFoundException) {
                toast("")
                Toast.makeText(this, "No application was found to handle the search request", Toast.LENGTH_SHORT).show()
            }
        }
    }

}