import { useState, useEffect } from "react"; export interface PluginParameter { name: string; type: "string" | "number" | "boolean" | "array" | "object"; required: boolean; description: string; example?: any; default?: any; enum?: any[]; pattern?: string; } export interface PluginResponse { status: number; description: string; example: any; } export interface PluginParameters { query?: PluginParameter[]; body?: PluginParameter[]; headers?: PluginParameter[]; path?: PluginParameter[]; } export interface PluginMetadata { name: string; description: string; version: string; category: string[]; method: string; endpoint: string; aliases: string[]; tags?: string[]; parameters?: PluginParameters; responses?: { [statusCode: number]: PluginResponse; }; } export interface ApiStats { totalRequests: number; totalSuccess: number; totalFailed: number; uniqueVisitors: number; successRate: string; uptime: { ms: number; hours: number; days: number; formatted: string; }; } export interface Category { name: string; count: number; } export function usePlugins() { const [plugins, setPlugins] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetchPlugins(); }, []); const fetchPlugins = async () => { try { setLoading(true); const response = await fetch("/api/plugins"); const data = await response.json(); if (data.success) { setPlugins(data.plugins); } else { setError("Failed to load plugins"); } } catch (err) { setError(err instanceof Error ? err.message : "Unknown error"); } finally { setLoading(false); } }; return { plugins, loading, error, refetch: fetchPlugins }; } export function useStats() { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetchStats(); const interval = setInterval(fetchStats, 30000); return () => clearInterval(interval); }, []); const fetchStats = async () => { try { setLoading(true); const response = await fetch("/api/stats"); const data = await response.json(); if (data.success) { setStats(data.stats.global); } else { setError("Failed to load stats"); } } catch (err) { setError(err instanceof Error ? err.message : "Unknown error"); } finally { setLoading(false); } }; return { stats, loading, error, refetch: fetchStats }; } export function useCategories() { const [categories, setCategories] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetchCategories(); }, []); const fetchCategories = async () => { try { setLoading(true); const response = await fetch("/api/categories"); const data = await response.json(); if (data.success) { setCategories(data.categories); } else { setError("Failed to load categories"); } } catch (err) { setError(err instanceof Error ? err.message : "Unknown error"); } finally { setLoading(false); } }; return { categories, loading, error, refetch: fetchCategories }; } export function usePluginsByCategory(category: string | null) { const [plugins, setPlugins] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { if (!category) { fetchAllPlugins(); } else { fetchPluginsByCategory(category); } }, [category]); const fetchAllPlugins = async () => { try { setLoading(true); const response = await fetch("/api/plugins"); const data = await response.json(); if (data.success) { setPlugins(data.plugins); } else { setError("Failed to load plugins"); } } catch (err) { setError(err instanceof Error ? err.message : "Unknown error"); } finally { setLoading(false); } }; const fetchPluginsByCategory = async (cat: string) => { try { setLoading(true); const response = await fetch(`/api/plugins/category/${cat}`); const data = await response.json(); if (data.success) { setPlugins(data.plugins); } else { setError("Failed to load plugins"); } } catch (err) { setError(err instanceof Error ? err.message : "Unknown error"); } finally { setLoading(false); } }; return { plugins, loading, error }; }