import React, { useEffect } from 'react'; import { useQuery } from '@tanstack/react-query'; import { getSubscriptionStatus } from '../../api/client'; import { ShieldAlert, Zap, LockOpen, AlertTriangle } from 'lucide-react'; import { motion } from 'framer-motion'; import toast from 'react-hot-toast'; interface Props { onUpgradeClick: () => void; compact?: boolean; } const UsageCard: React.FC = ({ onUpgradeClick, compact }) => { const { data: sub, isLoading, isError } = useQuery({ queryKey: ['subscription'], queryFn: getSubscriptionStatus, refetchInterval: 60000, retry: false }); useEffect(() => { if (sub) { const iterPercent = (sub.wizard_iterations_today / sub.limits.max_wizard_iterations) * 100; if (iterPercent > 80 && iterPercent < 100) { toast('🚨 Zbliżasz się do limitu iteracji na dziś (Kreator).', { icon: '⚠️' }); } if (iterPercent >= 100) { toast.error('Limit iteracji wyczerpany! Zaktualizuj plan.'); } } }, [sub]); if (isLoading) return
; // W przypadku błędu API zapewniamy MOCK danych, aby zachować strukturę freemium z wizualnymi limitami. const activeSub = isError || !sub || typeof sub !== 'object' || !sub.limits ? { tier: 'free', wizard_iterations_today: 18, tokens_used_month: 24500, limits: { max_wizard_iterations: 25, max_tokens_monthly: 50000 } } : sub; const isFree = activeSub.tier === 'free'; const getTierColor = (tier: string) => { if(tier === 'pro') return 'var(--accent-green)'; if(tier === 'business') return 'var(--accent-purple)'; return 'var(--text-secondary)'; }; const currentTierColor = getTierColor(activeSub.tier); const iterPercent = isFree ? Math.min(100, (activeSub.wizard_iterations_today / activeSub.limits.max_wizard_iterations) * 100) : 0; const tokenPercent = isFree ? Math.min(100, (activeSub.tokens_used_month / activeSub.limits.max_tokens_monthly) * 100) : 0; return (

Twój Obecny Plan

{activeSub.tier}
{/* ITERACJE KREATORA */}
{!compact && "Wykorzystane "}Iteracje 70 ? '#EF4444' : 'inherit' }}> {isFree ? ( <>{activeSub.wizard_iterations_today} / {activeSub.limits.max_wizard_iterations} ) : ( Nieograniczone )}
{isFree && (
70 ? 'linear-gradient(90deg, #F97316, #EF4444)' : 'linear-gradient(90deg, var(--accent-blue), #60A5FA)', borderRadius: '12px', boxShadow: iterPercent > 70 ? '0 0 15px rgba(239, 68, 68, 0.6)' : 'none' }} />
{iterPercent.toFixed(0)}%
)}
{/* TOKENY MIESIĘCZNE */}
{!compact && "Zużycie "}Modele AI {isFree ? ( <>{(activeSub.tokens_used_month / 1000).toFixed(1)}k / {(activeSub.limits.max_tokens_monthly / 1000).toFixed(0)}k ) : ( Nieograniczone )}
{isFree && (
{tokenPercent.toFixed(0)}%
)}
{activeSub.tier !== 'business' && (
{isFree && ( <> Odblokuj Pełną Moc
Zaufany wybór ponad 15,000 przedsiębiorców.
)}
)}
); }; export default UsageCard;