import React, { useState, useEffect } from 'react'; import { cardApi, aiCardApi } from '../services/api'; import '../styles/GachaStats.css'; interface GachaStatsData { total_draws: number; cards_by_rarity: Record; success_rates: Record; recent_activity: Array<{ timestamp: string; user_did: string; card_name: string; rarity: string; }>; } export const GachaStats: React.FC = () => { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [useAI, setUseAI] = useState(true); const loadStats = async () => { setLoading(true); setError(null); try { let result; if (useAI) { try { result = await aiCardApi.getEnhancedStats(); } catch (aiError) { console.warn('AI統計が利用できません、基本統計に切り替えます:', aiError); setUseAI(false); result = await cardApi.getGachaStats(); } } else { result = await cardApi.getGachaStats(); } setStats(result); } catch (err) { console.error('Gacha stats failed:', err); setError('統計データの取得に失敗しました。ai.cardサーバーが起動していることを確認してください。'); } finally { setLoading(false); } }; useEffect(() => { loadStats(); }, []); if (loading) { return (

統計データ取得中...

); } if (error) { return (

{error}

); } if (!stats) { return (

統計データがありません

); } return (

📊 ガチャ統計

{stats.total_draws}
総ガチャ実行数

レアリティ別出現数

{Object.entries(stats.cards_by_rarity).map(([rarity, count]) => (
{count}
{rarity}
{stats.success_rates[rarity] && (
{(stats.success_rates[rarity] * 100).toFixed(1)}%
)}
))}
{stats.recent_activity && stats.recent_activity.length > 0 && (

最近の活動

{stats.recent_activity.slice(0, 5).map((activity, index) => (
{new Date(activity.timestamp).toLocaleString()}
{activity.rarity} {activity.card_name}
))}
)}
); };