import { useState } from 'react';
import { useRouter } from 'next/router';
// Expanding Add Button Component
function ExpandingAddButton({ card, onAddToCollection, onAddToDeck, onMarkAsOwned }) {
const [isExpanded, setIsExpanded] = useState(false);
const handleMainClick = (e) => {
e.stopPropagation();
if (!isExpanded) {
setIsExpanded(true);
} else {
// Default action when expanded - add to collection
onAddToCollection([card]);
setIsExpanded(false);
}
};
const handleOptionClick = (e, action) => {
e.stopPropagation();
action();
setIsExpanded(false);
};
return (
{/* Expanded Options */}
{isExpanded && (
)}
{/* Main Add Button */}
{/* Click outside to close */}
{isExpanded && (
{
e.stopPropagation();
setIsExpanded(false);
}}
/>
)}
);
}
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);
// Panel positioning no longer needed - using simple hover buttons
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 && (
)}
{/* Card Image */}
{!imageError ? (

) : (
)}
{/* Hover Action Buttons */}
{/* Top Left - Checkbox */}
{/* Top Right - Favorite */}
{/* Bottom Left - Expanding Add Button */}
alert('Mark as owned (coming soon)')}
/>
);
}