import { showDialog, showToast } from 'vant'

import {
  paymentPayURL,
  useOrderPaymentCashier,
} from '@/features/orders/composables/useOrderPaymentCashier'

export { paymentPayURL as mobilePaymentPayURL }

/**
 * 移动端支付收银台 Composable。
 *
 * 在通用 {@link useOrderPaymentCashier} 基础上注入 vant 的 toast 提示，
 * 并处理微信 / 支付宝内嵌浏览器的直接跳转拉起支付。对外 API 名保持不变，
 * Mobile 视图无需改动。
 */
export function useMobilePaymentCashier() {
  function isInAppPaymentBrowser(): boolean {
    if (typeof navigator === 'undefined') return false
    const ua = navigator.userAgent || ''
    return /MicroMessenger|AlipayClient/i.test(ua)
  }

  const cashier = useOrderPaymentCashier({
    notifySuccess: message => showToast({ message, icon: 'passed' }),
    notifyError: message => showToast({ message, icon: 'cross' }),
    notifyInfo: message => showToast({ message, icon: 'info-o' }),
    notifyFallback: message => {
      void showDialog({
        title: '订单支付',
        message,
        confirmButtonText: '知道了',
      })
    },
    paidMessage: '支付成功，正在进入群消息',
    pollIntervalMs: 2500,
    qrWidth: 220,
    openExternalURL: url => {
      if (isHTTPURL(url) && isInAppPaymentBrowser()) {
        window.location.href = url
        return true
      }
      return false
    },
  })

  return {
    ...cashier,
    // 保持 Mobile 视图既有调用名。
    openMobilePaymentCashier: cashier.openPaymentCashier,
  }
}

function isHTTPURL(value: string): boolean {
  return /^https?:\/\//i.test(value)
}
