"use client"; import useRelicMakerStore from "@/stores/relicMakerStore"; import useUserDataStore from "@/stores/userDataStore"; import { useShallow } from "zustand/react/shallow"; import Image from "next/image"; import { useMemo } from "react"; interface RelicCardProps { slot: string avatarId: string } const getRarityColor = (rarity: string) => { switch (rarity) { case '6': return 'border-amber-400/90 shadow-[0_0_16px_rgba(251,191,36,0.4)] bg-linear-to-br from-amber-600 via-amber-400 to-amber-500'; case '5': return 'border-purple-400/90 shadow-[0_0_16px_rgba(192,132,252,0.4)] bg-linear-to-br from-purple-700 via-purple-400 to-purple-500'; case '4': return 'border-sky-400/90 shadow-[0_0_16px_rgba(56,189,248,0.4)] bg-linear-to-br from-blue-700 via-blue-400 to-sky-500'; case '3': return 'border-emerald-400/90 shadow-[0_0_16px_rgba(52,211,153,0.4)] bg-linear-to-br from-emerald-700 via-emerald-400 to-emerald-500'; default: return 'border-base-content/20 bg-base-300'; } }; const getSlotIconAndName = (slot: string) => { const slotMap: Record = { '1': { icon: '/relics/HEAD.png', name: 'Head' }, '2': { icon: '/relics/HAND.png', name: 'Hands' }, '3': { icon: '/relics/BODY.png', name: 'Body' }, '4': { icon: '/relics/FOOT.png', name: 'Feet' }, '5': { icon: '/relics/NECK.png', name: 'Planar Sphere' }, '6': { icon: '/relics/OBJECT.png', name: 'Link Rope' }, }; const current = slotMap[slot]; if (!current) return null; return (
{current.name} {current.name}
); }; export default function RelicCard({ slot, avatarId }: RelicCardProps) { const { avatars } = useUserDataStore( useShallow((state) => ({ avatars: state.avatars })) ) const { selectedRelicSlot } = useRelicMakerStore( useShallow((state) => ({ selectedRelicSlot: state.selectedRelicSlot })) ) const relicDetail = useMemo(() => { const avatar = avatars[avatarId]; if (avatar) { const profile = avatar.profileList?.[avatar.profileSelect] ?? avatar.profileList?.[0]; return profile?.relics?.[slot] || null; } return null; }, [avatars, avatarId, slot]); const isSelected = selectedRelicSlot === slot; return (
{relicDetail ? (
Relic {/* Level Badge */}
+{relicDetail.level}
{getSlotIconAndName(slot)}
) : (
{/* Level Badge */}
+0
{getSlotIconAndName(slot)}
)}
) }