import { useState, useCallback } from 'react' import { listShopUserAddress, getShopUserAddress, addShopUserAddress, updateShopUserAddress, removeShopUserAddress, setDefaultAddress, } from '@/api/shop/shopUserAddress' import type { ShopUserAddress } from '@/api/shop/shopUserAddress/model' interface UseAddressReturn { addresses: ShopUserAddress[] loading: boolean defaultAddress: ShopUserAddress | null loadAddresses: () => Promise getAddress: (id: number) => Promise addAddress: (data: Partial) => Promise updateAddress: (data: ShopUserAddress) => Promise deleteAddress: (id: number) => Promise setDefault: (id: number) => Promise } export function useAddress(): UseAddressReturn { const [addresses, setAddresses] = useState([]) const [loading, setLoading] = useState(false) const loadAddresses = useCallback(async () => { setLoading(true) try { const list = await listShopUserAddress() // 调试日志:可看到解析后的地址数量与首项 // eslint-disable-next-line no-console console.log('[useAddress] loaded addresses:', Array.isArray(list) ? list.length : 0, list && (list as any[]).length > 0 ? JSON.stringify(list[0])?.substring(0, 200) : '(empty)') setAddresses(Array.isArray(list) ? list : []) } catch (error: any) { // eslint-disable-next-line no-console console.error('[useAddress] Load addresses error:', error?.message || error) setAddresses([]) } finally { setLoading(false) } }, []) /** 根据 ID 获取单个地址 */ const getAddress = useCallback(async (id: number): Promise => { try { return await getShopUserAddress(id) } catch { return null } }, []) const addAddress = useCallback(async (data: Partial): Promise => { try { await addShopUserAddress(data as any) await loadAddresses() return true } catch { return false } }, [loadAddresses]) const updateAddress = useCallback(async (data: ShopUserAddress): Promise => { try { await updateShopUserAddress(data) await loadAddresses() return true } catch { return false } }, [loadAddresses]) const deleteAddress = useCallback(async (id: number): Promise => { try { await removeShopUserAddress(id) setAddresses(prev => prev.filter(a => a.id !== id)) return true } catch { return false } }, []) const setDefault = useCallback(async (id: number): Promise => { try { await setDefaultAddress(id) await loadAddresses() return true } catch { return false } }, [loadAddresses]) const defaultAddress = addresses.find(a => a.isDefault) || addresses[0] || null return { addresses, loading, defaultAddress, loadAddresses, getAddress, addAddress, updateAddress, deleteAddress, setDefault } }