'use client'

import React from 'react'
import { useRouter, useSearchParams } from 'next/navigation'
import { LARK_USER_TOKEN_LOCALST } from '@/lib/consts'
import Script from 'next/script'

const AuthLark = () => {
  const router = useRouter()
  const searchParams = useSearchParams()
  const rurl = decodeURIComponent(searchParams.get('rurl') || '/')

  const handleH5SDKLoad = async () => {
    const userAccessToken = localStorage.getItem(LARK_USER_TOKEN_LOCALST)
    if (userAccessToken) {
      const res = await fetch('/api/lark-userinfo', {
        method: 'GET',
        headers: {
          Authorization: `Bearer ${userAccessToken}`,
        },
      })
      if (res.ok) {
        const uInfo = await res.json()
        if (uInfo) {
          router.push(rurl)
          return
        }
      }
    }

    localStorage.removeItem(LARK_USER_TOKEN_LOCALST)

    const h5sdk = (window as any)?.h5sdk as any
    h5sdk.error((err: any) => {
      console.error(err)
    })

    h5sdk.ready(() => {
      ;(window as any).tt.requestAuthCode({
        appId: 'cli_a34ce7350df8900e',
        success(res: any) {
          fetch(`/api/lark-auth-callback?code=${res.code}`)
            .then((response2) =>
              response2.json().then((res2) => {
                localStorage.setItem(LARK_USER_TOKEN_LOCALST, res2.access_token)
                router.push(rurl)
              }),
            )
            .catch(function (e) {
              console.error(e)
            })
        },
        fail(err: any) {
          console.error(err)
        },
      })
    })
  }

  return (
    <Script
      src="https://lf1-cdn-tos.bytegoofy.com/goofy/lark/op/h5-js-sdk-1.5.23.js"
      onLoad={handleH5SDKLoad}
    />
  )
}

export default AuthLark
