import { useReadContract } from 'wagmi'

/** 最小 ERC20 decimals ABI，无需引入完整 ABI 文件 */
const DECIMALS_ABI = [
  {
    inputs: [],
    name: 'decimals',
    outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }],
    stateMutability: 'view',
    type: 'function',
  },
] as const

/**
 * 从合约地址直接读取精度（适用于产品 API 返回 contractAddress 的场景）
 * 优先从合约 decimals() 读取，失败时回退到 fallback（通常是 token.decimals）
 *
 * @param contractAddress 合约地址，直接来自产品/Token 对象
 * @param fallback        备用精度（来自 token.decimals 或链配置）
 */
export function useTokenDecimalsFromAddress(
  contractAddress: string | undefined,
  fallback: number = 18
): number {
  const { data, isError } = useReadContract({
    address: contractAddress as `0x${string}` | undefined,
    abi: DECIMALS_ABI,
    functionName: 'decimals',
    query: {
      enabled: !!contractAddress,
      staleTime: Infinity,
      gcTime: Infinity,
      retry: 2,
    },
  })

  return (data !== undefined && !isError) ? Number(data) : fallback
}
