import { useState, useEffect } from 'react'; import { useRouter } from 'next/router'; import dynamic from 'next/dynamic'; import Layout from '../../components/Layout'; import AdminProtected from '../../components/AdminProtected'; const CardImport = () => { const router = useRouter(); const [importType, setImportType] = useState('mtg'); const [setCode, setSetCode] = useState(''); const [isImporting, setIsImporting] = useState(false); const [importResult, setImportResult] = useState(null); const handleImport = async () => { if (!setCode.trim()) { alert('Please enter a set code'); return; } setIsImporting(true); setImportResult(null); try { const endpoint = importType === 'mtg' ? '/api/cards/import-mtg' : '/api/cards/import-pokemon'; const response = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${localStorage.getItem('auth_token')}`, }, body: JSON.stringify({ setCode: setCode.trim() }), }); const result = await response.json(); if (response.ok) { setImportResult({ success: true, message: result.message, imported: result.imported, skipped: result.skipped, total: result.total }); } else { setImportResult({ success: false, message: result.error || 'Import failed' }); } } catch (error) { setImportResult({ success: false, message: 'Network error: ' + error.message }); } finally { setIsImporting(false); } }; const popularSets = { mtg: [ { code: 'neo', name: 'Kamigawa: Neon Dynasty' }, { code: 'vow', name: 'Innistrad: Crimson Vow' }, { code: 'mid', name: 'Innistrad: Midnight Hunt' }, { code: 'afr', name: 'Adventures in the Forgotten Realms' }, { code: 'stx', name: 'Strixhaven: School of Mages' }, { code: 'khm', name: 'Kaldheim' }, { code: 'znr', name: 'Zendikar Rising' }, { code: 'iko', name: 'Ikoria: Lair of Behemoths' }, { code: 'thb', name: 'Theros Beyond Death' }, { code: 'eld', name: 'Throne of Eldraine' } ], pokemon: [ { code: 'swsh1', name: 'Sword & Shield' }, { code: 'swsh2', name: 'Rebel Clash' }, { code: 'swsh3', name: 'Darkness Ablaze' }, { code: 'swsh4', name: 'Vivid Voltage' }, { code: 'swsh5', name: 'Battle Styles' }, { code: 'swsh6', name: 'Chilling Reign' }, { code: 'swsh7', name: 'Evolving Skies' }, { code: 'swsh8', name: 'Fusion Strike' }, { code: 'swsh9', name: 'Brilliant Stars' }, { code: 'swsh10', name: 'Astral Radiance' } ] }; return ( {(user) => (
{/* Admin Navigation */}

Admin Tools

{/* Card Import Section */}

Card Import Manager

Import cards from external APIs into your database

{/* Import Form */}

Import Settings

setSetCode(e.target.value)} placeholder="e.g., neo, vow, swsh1" className="input-field w-full" />

Enter the set code (usually 3-4 characters)

{/* Import Result */} {importResult && (

{importResult.success ? 'Import Successful' : 'Import Failed'}

{importResult.message}

{importResult.success && (

Imported: {importResult.imported}

Skipped: {importResult.skipped}

Total: {importResult.total}

)}
)}
{/* Popular Sets */}

Popular Sets

Magic: The Gathering

{popularSets.mtg.map((set) => ( ))}

Pokemon TCG

{popularSets.pokemon.map((set) => ( ))}
{/* Import Tips */}

Import Tips

  • • Set codes are case-insensitive
  • • Duplicate cards will be skipped automatically
  • • Import may take several minutes for large sets
  • • Prices are fetched from TCGPlayer when available
  • • Images are stored as URLs to external sources
)}
); }; // Export with dynamic import to disable SSR export default dynamic(() => Promise.resolve(CardImport), { ssr: false });