"use client"; import { useState, useEffect } from "react"; import { aiAssistantApi } from "@/lib/api/aiAssistant"; import type { UsageSummary } from "@/lib/api/aiAssistant"; import { BarChart3, Calendar, Loader2, TrendingUp, Zap, DollarSign } from "lucide-react"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Progress } from "@/components/ui/progress"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { toast } from "sonner"; interface DailyUsageItem { date?: string; totalTokens?: number; requestCount?: number; } export default function AiAssistantUsagePage() { const [loading, setLoading] = useState(true); const [usage, setUsage] = useState(null); const [dailyUsage, setDailyUsage] = useState([]); const [period, setPeriod] = useState("7"); useEffect(() => { loadUsage(); }, [period]); const loadUsage = async () => { setLoading(true); try { const [usageRes, dailyRes] = await Promise.all([ aiAssistantApi.get("/usage"), aiAssistantApi.get(`/usage/daily?days=${period}`), ]); setUsage(usageRes.data?.data ?? null); setDailyUsage((dailyRes.data?.data as { usage?: DailyUsageItem[] })?.usage ?? []); } catch { toast.error("사용량 데이터를 불러오는데 실패했습니다."); } finally { setLoading(false); } }; if (loading) { return (
); } const todayTokens = usage?.usage?.today?.tokens ?? 0; const todayRequests = usage?.usage?.today?.requests ?? 0; const monthlyTokens = usage?.usage?.monthly?.totalTokens ?? 0; const monthlyCost = usage?.usage?.monthly?.totalCost ?? 0; const monthlyLimit = usage?.limit?.monthly ?? 0; const usagePercent = monthlyLimit > 0 ? Math.round((monthlyTokens / monthlyLimit) * 100) : 0; const maxTokens = Math.max(...dailyUsage.map((d) => d.totalTokens ?? 0), 1); return (

사용량

API 사용량 및 비용을 확인합니다.

오늘 토큰
{todayTokens.toLocaleString()}
오늘 요청
{todayRequests.toLocaleString()}
이번 달 토큰
{monthlyTokens.toLocaleString()}
이번 달 비용
${monthlyCost.toFixed(4)}
일별 사용량 기간별 토큰 사용량 추이
{dailyUsage.length === 0 ? (

사용 기록이 없습니다.

) : (
{dailyUsage.map((day, idx) => (
{day.date ? new Date(day.date).toLocaleDateString("ko-KR", { month: "short", day: "numeric", }) : "-"}
{(day.totalTokens ?? 0).toLocaleString()} 토큰
{day.requestCount ?? 0}회
))}
)}

현재 플랜: {(usage?.plan ?? "FREE").toUpperCase()}

월간 한도: {monthlyLimit > 0 ? monthlyLimit.toLocaleString() : "무제한"} 토큰

{usagePercent}%

사용률

); }