import React, { useEffect, useState } from 'react'
import Taro, { useDidShow } from '@tarojs/taro'
import { View } from '@tarojs/components'
import { check_login_status } from '@/services/loginService'



export function getCurrentFullPath(): string {
  const pages = Taro.getCurrentPages()
  const currentPage = pages.at(-1)

  if (currentPage) {
    const route = currentPage.route
    const options = currentPage.options || {}

    const query = Object.keys(options)
      .map(key => `${key}=${options[key]}`)
      .join('&')

    return query ? `/${route}?${query}` : `/${route}`
  }
  return ''
}

export default function withAuth<P extends object>(WrappedComponent: React.ComponentType<P>) {
  const ComponentWithAuth: React.FC<P> = (props: P) => {
    const [authed, setAuthed] = useState(false)

    useEffect(() => {
      const is_login = check_login_status()
      setAuthed(is_login)

      if (!is_login) {
        const currentPage = getCurrentFullPath()
        Taro.redirectTo({
          url: `/pages/login/index/index${
            currentPage ? `?redirect=${currentPage}` : ''
          }`,
        })
      }
    }, [])

    if (!authed) {
      return <View /> // 空壳，避免 children 渲染出错
    }

    return <WrappedComponent {...props} />
  }

  return ComponentWithAuth
}