import { useState, useEffect } from "react" export interface DashboardStats { // Feature status enabledFeatures: number totalFeatures: number // Back In Stock backInStockSubscriptions: number backInStockEmailsSent: number backInStockConversionRate: number topRequestedProducts: Array<{ name: string; subscribers: number; productId: number }> // Wishlist totalWishlists: number wishlistItemsAdded7Days: number purchasesFromWishlist: number mostWishlistedProducts: Array<{ name: string; count: number; productId: number }> // Security spamBlocked30Days: number emailVerificationsPending: number recaptchaEnabled: boolean recaptchaVersion: string // Shipment Tracking ordersWithTracking: number shipmentsInTransit: number shipmentsDelivered7Days: number // Feature statuses features: Array<{ id: string name: string enabled: boolean pageId: string icon: string }> } const defaultStats: DashboardStats = { enabledFeatures: 0, totalFeatures: 15, backInStockSubscriptions: 0, backInStockEmailsSent: 0, backInStockConversionRate: 0, topRequestedProducts: [], totalWishlists: 0, wishlistItemsAdded7Days: 0, purchasesFromWishlist: 0, mostWishlistedProducts: [], spamBlocked30Days: 0, emailVerificationsPending: 0, recaptchaEnabled: false, recaptchaVersion: 'v2', ordersWithTracking: 0, shipmentsInTransit: 0, shipmentsDelivered7Days: 0, features: [], } export function useDashboardStats() { const [stats, setStats] = useState(defaultStats) const [loading, setLoading] = useState(true) useEffect(() => { fetchStats() }, []) const fetchStats = async () => { try { setLoading(true) const apiUrl = window.swiftCommerceData?.apiUrl || '/wp-json/swift-commerce/v1' const response = await fetch(`${apiUrl}/dashboard/stats`, { headers: { 'X-WP-Nonce': window.swiftCommerceData?.restNonce || '', }, }) if (response.ok) { const result = await response.json() if (result.success && result.data) { setStats(result.data) } } else { // Use mock data for now if API doesn't exist yet setStats(getMockStats()) } } catch (err) { console.error('Failed to fetch dashboard stats:', err) // Use mock data as fallback setStats(getMockStats()) } finally { setLoading(false) } } const refresh = () => { fetchStats() } return { stats, loading, refresh } } // Mock data for development/fallback function getMockStats(): DashboardStats { return { enabledFeatures: 8, totalFeatures: 16, backInStockSubscriptions: 47, backInStockEmailsSent: 234, backInStockConversionRate: 12.4, topRequestedProducts: [ { name: "Blue Widget Pro", subscribers: 23, productId: 101 }, { name: "Premium Gadget X", subscribers: 18, productId: 102 }, { name: "Limited Edition Item", subscribers: 12, productId: 103 }, ], totalWishlists: 1247, wishlistItemsAdded7Days: 89, purchasesFromWishlist: 34, mostWishlistedProducts: [ { name: "Designer Headphones", count: 156, productId: 201 }, { name: "Smart Watch Pro", count: 142, productId: 202 }, { name: "Wireless Earbuds", count: 98, productId: 203 }, ], spamBlocked30Days: 1247, emailVerificationsPending: 12, recaptchaEnabled: true, recaptchaVersion: 'v3', ordersWithTracking: 156, shipmentsInTransit: 42, shipmentsDelivered7Days: 89, features: [ { id: 'recaptcha', name: 'reCAPTCHA', enabled: true, pageId: 'spam/recaptcha', icon: 'Shield' }, { id: 'email-verification', name: 'Email Verification', enabled: true, pageId: 'spam/email-verification', icon: 'MailCheck' }, { id: 'back-in-stock', name: 'Back In Stock', enabled: true, pageId: 'notifications/back-in-stock', icon: 'Bell' }, { id: 'wishlist', name: 'Wishlist', enabled: true, pageId: 'products/wishlist', icon: 'Heart' }, { id: 'currency-switcher', name: 'Currency Switcher', enabled: true, pageId: 'currencies/switcher', icon: 'Coins' }, { id: 'added-to-cart', name: 'Add to Cart Popup', enabled: true, pageId: 'popups/added-to-cart', icon: 'ShoppingCart' }, { id: 'gdpr-notice', name: 'Cookie Consent', enabled: false, pageId: 'compliance/gdpr-notice', icon: 'Cookie' }, { id: 'checkout-fields', name: 'Checkout Fields', enabled: true, pageId: 'checkout/field-editor', icon: 'FormInput' }, { id: 'shipment-tracking', name: 'Shipment Tracking', enabled: true, pageId: 'shipping/tracking', icon: 'Truck' }, { id: 'ajax-search', name: 'Ajax Search', enabled: false, pageId: 'products/ajax-search', icon: 'Search' }, { id: 'product-bundles', name: 'Product Bundles', enabled: false, pageId: 'products/bundles', icon: 'Package' }, { id: 'product-addons', name: 'Product Addons', enabled: false, pageId: 'products/addons', icon: 'PlusCircle' }, { id: 'subscriptions', name: 'Subscriptions', enabled: false, pageId: 'products/subscriptions', icon: 'RefreshCw' }, { id: 'quantity-limits', name: 'Quantity Limits', enabled: false, pageId: 'products/quantity-limits', icon: 'Hash' }, { id: 'registration-form', name: 'Registration Form', enabled: false, pageId: 'customization/registration-form', icon: 'UserPlus' }, { id: 'abandoned-cart', name: 'Cart Recovery', enabled: false, pageId: 'notifications/abandoned-cart', icon: 'ShoppingBag' }, ], } }