package seasonsview import "git.haelnorr.com/h/oslstats/internal/db" import "git.haelnorr.com/h/oslstats/internal/view/component/links" import "fmt" // PlayoffBracketView renders the full bracket visualization templ PlayoffBracketView(season *db.Season, league *db.League, bracket *db.PlayoffBracket) {

Finals Bracket

{ formatLabel(bracket.Format) }

@playoffStatusBadge(bracket.Status)
@bracketRounds(season, league, bracket)
} // bracketRounds groups series by round and renders them templ bracketRounds(season *db.Season, league *db.League, bracket *db.PlayoffBracket) { {{ // Group series by round rounds := groupSeriesByRound(bracket.Series) roundOrder := getRoundOrder(bracket.Format) }} for _, roundName := range roundOrder { if series, ok := rounds[roundName]; ok {

{ formatRoundName(roundName) }

for _, s := range series { @seriesCard(season, league, s) }
} } } templ seriesCard(season *db.Season, league *db.League, series *db.PlayoffSeries) {
{ series.Label } @seriesFormatBadge(series.MatchesToWin)
@seriesStatusBadge(series.Status)
@seriesTeamRow(season, league, series.Team1, series.Team1Seed, series.Team1Wins, series.WinnerTeamID, series.MatchesToWin) @seriesTeamRow(season, league, series.Team2, series.Team2Seed, series.Team2Wins, series.WinnerTeamID, series.MatchesToWin)
if series.MatchesToWin > 1 {
{ fmt.Sprint(series.Team1Wins) } - { fmt.Sprint(series.Team2Wins) }
}
} templ seriesTeamRow(season *db.Season, league *db.League, team *db.Team, seed *int, wins int, winnerID *int, matchesToWin int) { {{ isWinner := false if team != nil && winnerID != nil { isWinner = team.ID == *winnerID } isTBD := team == nil }}
if seed != nil { { fmt.Sprint(*seed) } } else { - } if isTBD { TBD } else { @links.TeamLinkInSeason(team, season, league) if isWinner { } }
if matchesToWin > 1 { { fmt.Sprint(wins) } }
} templ playoffStatusBadge(status db.PlayoffStatus) { switch status { case db.PlayoffStatusUpcoming: Upcoming case db.PlayoffStatusInProgress: In Progress case db.PlayoffStatusCompleted: Completed } } templ seriesFormatBadge(matchesToWin int) { {{ label := fmt.Sprintf("BO%d", matchesToWin*2-1) }} { label } } templ seriesStatusBadge(status db.SeriesStatus) { switch status { case db.SeriesStatusPending: Pending case db.SeriesStatusInProgress: Live case db.SeriesStatusCompleted: Complete case db.SeriesStatusBye: Bye } }