package com.nhnkcp.mobilePaySample

import android.os.Bundle
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import com.google.android.material.tabs.TabLayoutMediator
import com.nhnkcp.mobilePayLibrary.api.MobilePayAPI
import com.nhnkcp.mobilePayLibrary.contants.ResultCode
import com.nhnkcp.mobilePayLibrary.model.Payment
import com.nhnkcp.mobilePaySample.databinding.ActivityMainBinding


class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    // 페이두 결제앱으로부터 전달받은 결과값
    private val callResult =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            if (it.resultCode == RESULT_OK) {
                MobilePayAPI.getPaymentResult(it.data)?.let { trade ->
                    ResultDialog(trade).show(supportFragmentManager, "dialog")
                } ?: run { showToast("결과값이 존재하지 않습니다.") }
            }
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.viewPager.adapter = PagerAdapter(this) { requestPayment(it) }
        // 탭레이아웃과 뷰페이저 연결 및 탭레이아웃 타이틀 표시
        TabLayoutMediator(binding.tabLayoutMenu, binding.viewPager) { tab, position ->
            tab.text = (binding.viewPager.adapter as PagerAdapter).getTabTitle(position)
        }.attach()
    }

    private fun requestPayment(payment: Payment) {
        with(ResultCode) {
            when (MobilePayAPI.requestPayment(this@MainActivity, callResult, payment)) {
                REQUEST_NOT_INSTALL -> showToast("페이두 앱이 설치되지 않았습니다.")
                REQUEST_CONTEXT_NULL -> showToast("Context가 NULL 값입니다.")
                REQUEST_DATA_NULL -> showToast("결제요청 데이터가 NULL 값입니다.")
                CHECK_PAYMENT_CODE_FAIL -> showToast("전문코드를 정확히 입력해 주세요.")
                CHECK_GROUP_ID_FAIL -> showToast("그룹아이디를 정확히 입력해 주세요.")
                CHECK_BUSINESS_NO_FAIL -> showToast("사업자번호를 정확히 입력해 주세요.")
                CHECK_TID_FAIL -> showToast("단말기번호를 정확히 입력해 주세요.")
                CHECK_TOTAL_AMOUNT_FAIL -> showToast("총 거래금액을 정확히 입력해 주세요.")
                CHECK_TAX_FAIL -> showToast("세금을 정확히 입력해 주세요.")
                CHECK_TIP_FAIL -> showToast("봉사료를 정확히 입력해 주세요.")
                CHECK_DUTY_FREE_FAIL -> showToast("면세액을 정확히 입력해 주세요.")
                CHECK_CUP_DEPOSIT_FAIL -> showToast("자원순환 보증금을 정확히 입력해 주세요. 취소 거래시 입력이 불가능합니다.")
                CHECK_INSTALLMENT_FAIL -> showToast("할부개월을 정확히 입력해 주세요.")
                CHECK_PRIVACY_FAIL -> showToast("현금영수증 발급대상정보를 정확히 입력해 주세요.")
                CHECK_CASH_SELF -> showToast("현금영수증 자진발급은 발급대상정보를 지정할 수 없습니다.")
                CHECK_PRINT_DATA_FAIL -> showToast("출력요청 데이터를 정확히 입력해 주세요.")
                CHECK_APPROVAL_DATE_FAIL -> showToast("원거래 승인일자를 정확히 입력해 주세요.")
                CHECK_APPROVAL_NO_FAIL -> showToast("원거래 승인번호를 정확히 입력해 주세요.")
                CHECK_CASH_TYPE_FAIL -> showToast("현금영수증 거래유형 '0'소득공제, '1'지출증빙, '2'자진발급 입니다.")
                CHECK_CANCEL_REASON_FAIL -> showToast("현금영수증 취소사유를 정확히 입력해 주세요.")
                CHECK_VERIFICATION_CODE_FAIL -> showToast("요청 인증번호를 정확히 입력해 주세요.")
            }
        }
    }

    private fun showToast(message: String) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }
}