import { useState } from 'react';
import { useRouter } from 'next/router';
export default function CardItem({
card,
viewMode = 'grid',
isSelected = false,
onToggleSelect,
onAddToCollection,
onAddToDeck,
onToggleFavorite,
isFavorited = false
}) {
const [imageError, setImageError] = useState(false);
const router = useRouter();
const handleSelectChange = (e) => {
e.stopPropagation();
onToggleSelect(card);
};
const handleImageError = () => {
setImageError(true);
};
const handleCardClick = (e) => {
// Don't navigate if clicking on interactive elements
if (e.target.closest('input, button, a')) {
return;
}
router.push(`/card/${card.id}`);
};
// Get rarity-based styling
const getRarityEffects = (rarity) => {
const rarityLower = rarity?.toLowerCase() || '';
if (rarityLower.includes('mythic') || rarityLower.includes('legendary')) {
return {
glow: 'rarity-glow-mythic',
particles: 'rarity-particles-mythic',
border: 'border-yellow-400',
shadow: 'shadow-yellow-400/50'
};
} else if (rarityLower.includes('rare') || rarityLower.includes('holo')) {
return {
glow: 'rarity-glow-rare',
particles: 'rarity-particles-rare',
border: 'border-purple-400',
shadow: 'shadow-purple-400/50'
};
} else if (rarityLower.includes('uncommon')) {
return {
glow: 'rarity-glow-uncommon',
particles: 'rarity-particles-uncommon',
border: 'border-blue-400',
shadow: 'shadow-blue-400/30'
};
} else if (rarityLower.includes('enchanted') || rarityLower.includes('secret')) {
return {
glow: 'rarity-glow-enchanted',
particles: 'rarity-particles-enchanted',
border: 'border-pink-400',
shadow: 'shadow-pink-400/60'
};
}
return {
glow: '',
particles: '',
border: 'border-gray-200',
shadow: ''
};
};
const rarityEffects = getRarityEffects(card.rarity);
if (viewMode === 'list') {
return (
{/* Selection Checkbox */}
{/* Card Image */}
{!imageError ? (

) : (
No Image
)}
{/* Card Info */}
{card.name}
{card.set_name} • {card.rarity}
{card.card_type}
{/* Game Badge */}
{card.game}
{/* Price */}
${card.market_price}
{/* Actions */}
);
}
// Grid view
return (
{/* Main Card Container */}
{/* Rarity Particles */}
{rarityEffects.particles && (
)}
{/* Selection Checkbox */}
{/* Favorite Button */}
{/* Card Image */}
{!imageError ? (

) : (
)}
{/* Side Hover Panel */}
{/* Panel Header */}
{card.name}
${card.market_price}
{/* TCG-Specific Info */}
{card.game === 'MTG' && (
{card.mana_cost && (
Cost:
{card.mana_cost}
)}
{card.power && card.toughness && (
P/T:
{card.power}/{card.toughness}
)}
)}
{card.game === 'Pokemon' && card.power && (
)}
{card.game === 'Lorcana' && card.cmc && (
Cost:
{card.cmc}
{card.power && card.toughness && (
Str/Will:
{card.power}/{card.toughness}
)}
)}
{card.game}
{card.set_name}
{rarityEffects.glow && (
)}
{/* Panel Body */}
{/* Card Details */}
{/* Oracle Text */}
{card.oracle_text && (
Description
{card.oracle_text}
)}
{/* Colors for MTG */}
{card.game === 'MTG' && card.colors && card.colors.length > 0 && (
Colors
{card.colors.map((color, index) => (
{color}
))}
)}
{/* Panel Footer - Actions */}
{/* Primary Actions */}
{/* Secondary Actions */}
);
}