package com.miya.fastcashier.ui

import android.content.Intent
import android.os.Bundle
import android.view.KeyEvent
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
import com.fastcashier.lib_common.base.BaseActivity
import com.fastcashier.lib_common.ui.dialog.NumberManualDialog
import com.fastcashier.lib_common.util.clickWithTrigger
import com.miya.fastcashier.databinding.ActivityRefundBinding
import com.miya.fastcashier.util.CenterToasty
import com.miya.fastcashier.util.ScanGunKeyEventHelper
import com.miya.fastcashier.viewmodel.PayViewModel


class RefundActivity : BaseActivity() {
    private lateinit var viewModel: PayViewModel
    private lateinit var binding: ActivityRefundBinding

    private var numberManualDialog: NumberManualDialog? = null

    private var scanGunKeyEventHelper: ScanGunKeyEventHelper = ScanGunKeyEventHelper()

    companion object {
        fun start(context: BaseActivity) {
            val intent = Intent(context, RefundActivity::class.java)
            context.startActivity(intent)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityRefundBinding.inflate(layoutInflater)
        setContentView(binding.root)
        viewModel = ViewModelProvider(this).get(PayViewModel::class.java)
        viewModel.payResultLiveData.observe(this, { payResult ->
            payResult.onFailure {
                dismissProgressDialog()
                it.message?.let { it1 -> CenterToasty.error(this, it1, Toast.LENGTH_LONG).show() }
            }
            payResult.onSuccess { payServiceResponse ->
                dismissProgressDialog()
                PriceInputActivity.start(
                    this@RefundActivity,
                    PriceInputActivity.PRICEINPUT_TYPE_CREFUND,
                    payServiceResponse
                )
            }
        })

        viewModel.refundLiveData.observe(this, { payResult ->
            payResult.onFailure {
                dismissProgressDialog()
                it.message?.let { it1 -> CenterToasty.error(this, it1, Toast.LENGTH_LONG).show() }
            }
            payResult.onSuccess {
                dismissProgressDialog()
                CenterToasty.success(this, "退款成功!!", Toast.LENGTH_LONG).show()
                finish()
            }
        })
        val llBack = binding.llBack

        llBack.clickWithTrigger { finish() }

        binding.ivRefundManualInput.clickWithTrigger {
            if (numberManualDialog == null) {
                numberManualDialog = NumberManualDialog(this);
                numberManualDialog!!.setNumberInputListener(object :
                    NumberManualDialog.NumberInputListener {
                    override fun numberInput(number: String) {
                        showProgressDialog("正在为您退款..")
                        viewModel.payResultQuery(number)
                    }
                })
            }
            numberManualDialog!!.show()
        }

        scanGunKeyEventHelper.setOnBarCodeCatchListener {
            showProgressDialog("正在为您退款..")
            viewModel.payResultQuery(it)
        }
    }

    override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
        scanGunKeyEventHelper.analysisKeyEvent(event)
        return super.dispatchKeyEvent(event)
    }
}