import Select from '../../../components/Select' import Checkbox from '../../../components/Checkbox' import Tooltip from '../../../components/Tooltip' import { WEEKLY_BOSSES, MONTHLY_BOSSES, BOSS_IMAGE_BASE, calcPoints, formatDate } from '../data' const PARTY_OPTIONS = [1, 2, 3, 4, 5, 6].map((n) => ({ value: n, label: `${n}인` })) /** * week: { startDate, bosses: { [bossKey]: { enabled, difficulty, party } }, includeBlackMage: {enabled, difficulty, party} } */ export default function WeekCard({ weekNumber, weekData, cumulativePoints, currentChapter, chapterInfo, onChange, weekProgress }) { const totalThisWeek = weekProgress.points const updateBoss = (bossKey, patch) => { const nextBosses = { ...weekData.bosses, [bossKey]: { ...weekData.bosses[bossKey], ...patch } } onChange({ ...weekData, bosses: nextBosses }) } const updateBlackMage = (patch) => { onChange({ ...weekData, blackMage: { ...weekData.blackMage, ...patch } }) } return (
{/* 헤더: 주차 번호 + 날짜 + 이번 주 획득 + 누적 */}
{weekNumber}주차
{formatDate(weekData.startDate)}
획득 +{totalThisWeek}
누적 {cumulativePoints}
{chapterInfo && (
{chapterInfo.name} {chapterInfo.current}/{chapterInfo.required}
)}
{/* 보스 그리드 */}
{WEEKLY_BOSSES.map((boss) => { const sel = weekData.bosses[boss.key] || { enabled: false, difficulty: boss.difficulties[0].key, party: 1 } const diff = boss.difficulties.find((d) => d.key === sel.difficulty) || boss.difficulties[0] const earned = sel.enabled ? calcPoints(diff.points, sel.party) : 0 return (
updateBoss(boss.key, { enabled: v })} size="sm" /> {boss.name} {boss.name} {earned > 0 && ( +{earned} )}
{sel.enabled && (
updateBoss(boss.key, { party: v })} options={PARTY_OPTIONS} className="w-16" />
)}
) })} {/* 검은 마법사 (월 1회) */} {MONTHLY_BOSSES.map((boss) => { const sel = weekData.blackMage || { enabled: false, difficulty: boss.difficulties[0].key, party: 1 } const diff = boss.difficulties.find((d) => d.key === sel.difficulty) || boss.difficulties[0] const earned = sel.enabled ? calcPoints(diff.points, sel.party) : 0 return (
updateBlackMage({ enabled: v })} size="sm" /> {boss.name} {boss.name} 월간 {earned > 0 && ( +{earned} )}
{sel.enabled && (
updateBlackMage({ party: v })} options={PARTY_OPTIONS} className="w-16" />
)}
) })}
) }