import React, { useState, useEffect } from 'react'; import { useAuth } from '../../contexts/AuthContext'; interface CardCounts { MTG?: number; POKEMON?: number; LORCANA?: number; total?: number; } interface LoadingResults { mtg?: number; pokemon?: number; lorcana?: number; } const CardLoader: React.FC = () => { const { user, token } = useAuth(); const [cardCounts, setCardCounts] = useState({}); const [loading, setLoading] = useState(false); const [loadingResults, setLoadingResults] = useState({}); const [selectedGame, setSelectedGame] = useState('ALL'); const [message, setMessage] = useState(''); // Fetch current card counts const fetchCardCounts = async () => { try { const response = await fetch('https://tcg-vault.vercel.app/api/admin?action=card-counts', { headers: { 'Authorization': `Bearer ${token}` } }); if (response.ok) { const data = await response.json(); setCardCounts(data.counts || {}); } } catch (error) { console.error('Error fetching card counts:', error); } }; useEffect(() => { fetchCardCounts(); }, []); // Load cards from external APIs const loadCards = async (game: string) => { setLoading(true); setMessage(`Loading ${game} cards...`); setLoadingResults({}); try { const response = await fetch(`https://tcg-vault.vercel.app/api/admin?action=load-cards`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ game }) }); if (response.ok) { const data = await response.json(); setLoadingResults(data.results || {}); setMessage(`Successfully loaded cards! ${data.message}`); // Refresh card counts setTimeout(() => { fetchCardCounts(); }, 1000); } else { const errorData = await response.json(); setMessage(`Error loading cards: ${errorData.error}`); } } catch (error) { console.error('Error loading cards:', error); setMessage('Error loading cards. Please try again.'); } finally { setLoading(false); } }; const handleLoadCards = () => { loadCards(selectedGame); }; return (

Card Database Loader

{/* Current Card Counts */}

Current Database Status

{cardCounts.MTG || 0}
MTG Cards
{cardCounts.POKEMON || 0}
Pokémon Cards
{cardCounts.LORCANA || 0}
Lorcana Cards
{cardCounts.total || 0}
Total Cards
{/* Load Cards Section */}

Load Cards from External APIs

{/* Loading Results */} {Object.keys(loadingResults).length > 0 && (

Loading Results:

{loadingResults.mtg !== undefined && (
MTG: {loadingResults.mtg} cards loaded
)} {loadingResults.pokemon !== undefined && (
Pokémon: {loadingResults.pokemon} cards loaded
)} {loadingResults.lorcana !== undefined && (
Lorcana: {loadingResults.lorcana} cards loaded
)}
)} {/* Message */} {message && (
{message}
)}
{/* Instructions */}

Instructions

  • • This will load cards from external APIs into your database
  • • MTG cards come from Scryfall API
  • • Pokémon cards come from Pokémon TCG API
  • • Lorcana cards come from Lorcana API and Lorcast API
  • • Loading may take several minutes for large datasets
  • • Cards are deduplicated automatically
); }; export default CardLoader;