"use client"; import { useState } from "react"; import Image from "next/image"; type Player = { id: string; name: string; image: string | null; position: "GK" | "DEF" | "MID" | "FWD"; price: number; country: { name: string; flagUrl: string | null }; }; type Card = { id: string; status: "SEALED" | "OPENED"; state: "IN_INVENTORY" | "IN_TEAM" | "SOLD"; acquiredDate: string; openedAt: string | null; player: Player; }; const POSITION_LABELS: Record = { GK: "دروازه‌بان", DEF: "مدافع", MID: "هافبک", FWD: "مهاجم", }; function saleValue(price: number) { return Math.round(price * 0.7); } function SealedCard({ card, onReveal }: { card: Card; onReveal: (id: string) => void }) { const [opening, setOpening] = useState(false); async function handleOpen() { setOpening(true); await new Promise((resolve) => setTimeout(resolve, 600)); onReveal(card.id); } return (
🎴

کارت ویژه مهر شده

دریافت: {new Date(card.acquiredDate).toLocaleDateString("fa-IR")}

); } function OpenedCard({ card, loading, onAdd, onSell, }: { card: Card; loading: boolean; onAdd?: () => void; onSell?: () => void; }) { return (
{card.player.image ? ( {card.player.name} ) : (
)}

{card.player.name}

{card.player.country.name}

{POSITION_LABELS[card.player.position]}
{card.state === "IN_TEAM" ? "در تیم" : `فروش: ${saleValue(card.player.price)}M`}
{card.state === "IN_INVENTORY" && onAdd && ( )} {card.state !== "SOLD" && onSell && ( )}
); } export default function GoldenCardsClient({ initialCards }: { initialCards: Card[] }) { const [cards, setCards] = useState(initialCards); const [revealedCard, setRevealedCard] = useState(null); const [loadingId, setLoadingId] = useState(null); const [replacementDialog, setReplacementDialog] = useState<{ card: Card; candidates: Array<{ playerId: string; name: string; isBench: boolean; isSpecial: boolean }>; } | null>(null); async function handleReveal(cardId: string) { const res = await fetch(`/api/golden-cards/${cardId}/reveal`, { method: "POST" }); if (res.ok) { const updated: Card = await res.json(); setCards((prev) => prev.map((card) => (card.id === cardId ? updated : card))); setRevealedCard(updated); } } async function handleSell(cardId: string) { setLoadingId(cardId); const res = await fetch(`/api/golden-cards/${cardId}/sell`, { method: "POST" }); if (res.ok) { setCards((prev) => prev.map((card) => (card.id === cardId ? { ...card, state: "SOLD" } : card))); } setLoadingId(null); } async function handleAdd(cardId: string, replacePlayerId?: string) { setLoadingId(cardId); const res = await fetch(`/api/golden-cards/${cardId}/add-to-team`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(replacePlayerId ? { replacePlayerId } : {}), }); const data = await res.json().catch(() => null); if (res.ok) { setCards((prev) => prev.map((card) => { if (card.id === cardId) return { ...card, state: "IN_TEAM" }; if (data?.replacedGoldenCardId && card.id === data.replacedGoldenCardId) return { ...card, state: "IN_INVENTORY" }; return card; }) ); setReplacementDialog(null); } else if (res.status === 409 && data?.needsReplacement) { const card = cards.find((item) => item.id === cardId); if (card) { setReplacementDialog({ card, candidates: data.candidates }); } } setLoadingId(null); } const sealed = cards.filter((card) => card.status === "SEALED"); const opened = cards.filter((card) => card.status === "OPENED" && card.state !== "SOLD"); const sold = cards.filter((card) => card.state === "SOLD"); return (
{replacementDialog && (

پست بازیکن پر است

برای اضافه کردن {replacementDialog.card.player.name} یکی از بازیکنان این پست را انتخاب کنید.

{replacementDialog.candidates.map((candidate) => ( ))}
)}

کارت ویژه

بازیکنان ویژه را به تیم اضافه کنید یا با فروش آن‌ها بودجه بگیرید.

{revealedCard && (
setRevealedCard(null)}>
e.stopPropagation()}>

کارت شما باز شد

handleAdd(revealedCard.id) : undefined} onSell={() => handleSell(revealedCard.id)} />
)} {cards.length === 0 && (
🎴

هنوز کارت ویژه ندارید

در کوییز روزانه شرکت کنید تا شانس دریافت کارت ویژه داشته باشید.

)} {sealed.length > 0 && (

کارت‌های مهر شده ({sealed.length})

{sealed.map((card) => ( ))}
)} {opened.length > 0 && (

کارت‌های آماده استفاده ({opened.length})

{opened.map((card) => ( handleAdd(card.id) : undefined} onSell={() => handleSell(card.id)} /> ))}
)} {sold.length > 0 && (

فروخته‌شده‌ها ({sold.length})

{sold.map((card) => ( ))}
)}
); }