import { FC, useEffect, useState } from 'react'
import { updateProfile } from '../pages/profile/service/ProfileService'
import { useLocation } from 'react-router-dom'

declare global {
    interface Window {
        NAJVA: {
            getUserToken: () => Promise<string>
            najvaUserSubscribed: (najvaUserToken: string) => void
        }
    }
}

const NajvaToken: FC = () => {
    const { pathname } = useLocation()
    const [isNajvaToken, setIsNajvaToken] = useState(false)
    const [retryCount, setRetryCount] = useState(0)

    const handleNajvaToken = async () => {
        try {
            console.log('تلاش برای دریافت توکن Najva...', { retryCount })

            // بررسی وجود window.NAJVA
            if (!window.NAJVA) {
                console.log('window.NAJVA موجود نیست')
                return false
            }

            console.log('window.NAJVA موجود است، در حال دریافت توکن...')
            const userToken = await window.NAJVA.getUserToken()

            console.log('توکن دریافت شده:', userToken ? 'موجود' : 'خالی')

            if (userToken) {
                console.log('در حال ارسال توکن به سرور...')
                await updateProfile({
                    pushToken: userToken,
                })
                setIsNajvaToken(true)
                console.log('توکن با موفقیت ارسال شد')
                return true
            } else {
                console.log('توکن خالی است')
                return false
            }
        } catch (error) {
            console.error('خطا در دریافت توکن Najva:', error)
            return false
        }
    }

    const tryGetToken = async () => {
        const success = await handleNajvaToken()

        if (!success && retryCount < 5) {
            console.log(`تلاش مجدد در ${(retryCount + 1) * 1000}ms...`)
            setTimeout(() => {
                setRetryCount(prev => prev + 1)
            }, (retryCount + 1) * 1000) // 1s, 2s, 3s, 4s, 5s
        }
    }

    useEffect(() => {
        if (!isNajvaToken) {
            tryGetToken()
        }
    }, [pathname, isNajvaToken, retryCount])

    return null
}

export default NajvaToken