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}
{earned > 0 && (
+{earned}
)}
{sel.enabled && (
)}
)
})}
{/* 검은 마법사 (월 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} 월간
{earned > 0 && (
+{earned}
)}
{sel.enabled && (
updateBlackMage({ difficulty: v })}
options={boss.difficulties.map((d) => ({ value: d.key, label: `${d.label} +${d.points}` }))}
className="flex-1"
/>
updateBlackMage({ party: v })}
options={PARTY_OPTIONS}
className="w-16"
/>
)}
)
})}
)
}