'use client'

import { useCallback, useEffect, useState } from 'react'

type UserInfoResponse = {
    ok?: boolean
    coinBalance?: number
}

export function useUserCoinBalance(enabled: boolean) {
    const [coinBalance, setCoinBalance] = useState<number | null>(null)
    const [coinBalanceLoading, setCoinBalanceLoading] = useState(false)

    const refreshCoinBalance = useCallback(async () => {
        if (!enabled) return
        setCoinBalanceLoading(true)
        try {
            const res = await fetch('/api/profile/user-info', { credentials: 'include' })
            const json = (await res.json()) as UserInfoResponse
            if (res.ok && json.ok && typeof json.coinBalance === 'number') {
                setCoinBalance(json.coinBalance)
            } else {
                setCoinBalance(null)
            }
        } catch {
            setCoinBalance(null)
        } finally {
            setCoinBalanceLoading(false)
        }
    }, [enabled])

    useEffect(() => {
        if (!enabled) {
            setCoinBalance(null)
            setCoinBalanceLoading(false)
            return
        }
        void refreshCoinBalance()
    }, [enabled, refreshCoinBalance])

    return { coinBalance, coinBalanceLoading, setCoinBalance, refreshCoinBalance }
}
