import { useQuery } from "@tanstack/react-query"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } from "recharts"; import { analyticsService } from "@/services"; import type { StorageByUser, StorageAnalytics } from "@/types/analytics.types"; import { HardDrive, FileText, Database, Users, ChevronRight, } from "lucide-react"; const COLORS = ["#111827", "#4B5563", "#9CA3AF", "#D1D5DB", "#E2E8F0"]; interface ChartDataItem { name: string; value: number; } export default function AnalyticsStoragePage() { const { data: storage, isLoading } = useQuery({ queryKey: ["admin", "analytics", "storage"], queryFn: () => analyticsService.getStorageAnalytics(), }); const formatBytes = (bytes: number) => { if (bytes === 0) return "0 Bytes"; const k = 1024; const sizes = ["B", "KB", "MB", "GB", "TB"]; const i = Math.floor(Math.log(bytes) / Math.log(k)); return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + " " + sizes[i]; }; const chartData: ChartDataItem[] = storage?.byCategory?.map((cat) => ({ name: cat.category, value: cat.size, })) || []; return (

Storage Intelligence

Infrastructure resource allocation and data distribution registry.

Resource Consumption {isLoading ? (
Quantifying resources...
) : ( <>

Aggregate Payload

{storage?.total ? formatBytes(storage.total.size) : "0 B"}

Object Registry

{storage?.total?.files?.toLocaleString() || 0}{" "} Items

Efficiency Status Optimal

42% Cluster Capacity Utilized

)} Distribution by Taxonomy {isLoading ? (
...
) : chartData.length > 0 ? ( {chartData.map((_entry: ChartDataItem, index: number) => ( ))} formatBytes(value)} /> ) : (
No category distribution.
)}
{storage?.topUsers && storage.topUsers.length > 0 && (
High-Consumption Operators
{storage.topUsers.map((user: StorageByUser, index: number) => (
0{index + 1}

{user.userName || user.email}

{user.documentCount.toLocaleString()} Object References

{formatBytes(user.storageUsed)}
))}
)}
); }