/** * Returns the draft slot for a given pick number in a snake draft. */ export function getTeamForPick( pickNumber: number, draftSlots: T[] ): T | undefined { const totalTeams = draftSlots.length; if (totalTeams === 0) return undefined; const round = Math.ceil(pickNumber / totalTeams); const isEvenRound = round % 2 === 0; let pickInRound = ((pickNumber - 1) % totalTeams) + 1; if (isEvenRound) { pickInRound = totalTeams - pickInRound + 1; } return draftSlots.find((slot) => slot.draftOrder === pickInRound); } export interface ProjectedPick { round: number; pickNumber: number; picksFromNow: number; } export function getProjectedPicks(options: { draftSlots: Array<{ draftOrder: number; teamId: string }>; userTeamId: string; currentPick: number; totalRounds: number; existingPicks: Array<{ pickNumber: number; teamId: string }>; }): ProjectedPick[] { const { draftSlots, userTeamId, currentPick, totalRounds, existingPicks } = options; const totalTeams = draftSlots.length; if (totalTeams === 0) return []; const userSlot = draftSlots.find((slot) => slot.teamId === userTeamId); if (!userSlot) return []; const userDraftOrder = userSlot.draftOrder; const pickedNumbersForTeam = new Set( existingPicks .filter((p) => p.teamId === userTeamId) .map((p) => p.pickNumber) ); const result: ProjectedPick[] = []; for (let round = 1; round <= totalRounds; round++) { const isEvenRound = round % 2 === 0; const pickInRound = isEvenRound ? totalTeams - userDraftOrder + 1 : userDraftOrder; const pickNumber = (round - 1) * totalTeams + pickInRound; if (pickNumber < currentPick) continue; if (pickedNumbersForTeam.has(pickNumber)) continue; result.push({ round, pickNumber, picksFromNow: pickNumber - currentPick, }); } return result; }