package seasonsview import "git.haelnorr.com/h/oslstats/internal/db" import "git.haelnorr.com/h/oslstats/internal/view/component/links" import "fmt" import "sort" // seriesMatchPreviewTab renders the full Match Preview tab for upcoming series. // Shows team standings comparison, recent form, and full rosters side-by-side. templ seriesMatchPreviewTab( series *db.PlayoffSeries, rosters map[string][]*db.PlayerWithPlayStatus, preview *db.MatchPreviewData, ) {
if preview != nil { @seriesPreviewHeader(series, preview) } if preview != nil { @seriesPreviewFormGuide(series, preview) } @seriesPreviewRosters(series, rosters)
} // seriesPreviewHeader renders the broadcast-style team comparison with standings. templ seriesPreviewHeader(series *db.PlayoffSeries, preview *db.MatchPreviewData) {

Team Comparison

if series.Team1 != nil && series.Team1.Color != "" {
}

if series.Team1 != nil { @links.TeamNameLinkInSeason(series.Team1, series.Bracket.Season, series.Bracket.League) } else { TBD }

if series.Team1 != nil { { series.Team1.ShortName } }
VS
if series.Team2 != nil && series.Team2.Color != "" {
}

if series.Team2 != nil { @links.TeamNameLinkInSeason(series.Team2, series.Bracket.Season, series.Bracket.League) } else { TBD }

if series.Team2 != nil { { series.Team2.ShortName } }
{{ homePos := ordinal(preview.HomePosition) awayPos := ordinal(preview.AwayPosition) if preview.HomePosition == 0 { homePos = "N/A" } if preview.AwayPosition == 0 { awayPos = "N/A" } }}
@previewStatRow( homePos, "Position", awayPos, preview.HomePosition > 0 && preview.HomePosition < preview.AwayPosition, preview.AwayPosition > 0 && preview.AwayPosition < preview.HomePosition, ) @previewStatRow( fmt.Sprint(preview.HomeRecord.Points), "Points", fmt.Sprint(preview.AwayRecord.Points), preview.HomeRecord.Points > preview.AwayRecord.Points, preview.AwayRecord.Points > preview.HomeRecord.Points, ) @previewStatRow( fmt.Sprint(preview.HomeRecord.Played), "Played", fmt.Sprint(preview.AwayRecord.Played), false, false, ) @previewStatRow( fmt.Sprint(preview.HomeRecord.Wins), "Wins", fmt.Sprint(preview.AwayRecord.Wins), preview.HomeRecord.Wins > preview.AwayRecord.Wins, preview.AwayRecord.Wins > preview.HomeRecord.Wins, ) @previewStatRow( fmt.Sprint(preview.HomeRecord.OvertimeWins), "OT Wins", fmt.Sprint(preview.AwayRecord.OvertimeWins), preview.HomeRecord.OvertimeWins > preview.AwayRecord.OvertimeWins, preview.AwayRecord.OvertimeWins > preview.HomeRecord.OvertimeWins, ) @previewStatRow( fmt.Sprint(preview.HomeRecord.OvertimeLosses), "OT Losses", fmt.Sprint(preview.AwayRecord.OvertimeLosses), preview.HomeRecord.OvertimeLosses < preview.AwayRecord.OvertimeLosses, preview.AwayRecord.OvertimeLosses < preview.HomeRecord.OvertimeLosses, ) @previewStatRow( fmt.Sprint(preview.HomeRecord.Losses), "Losses", fmt.Sprint(preview.AwayRecord.Losses), preview.HomeRecord.Losses < preview.AwayRecord.Losses, preview.AwayRecord.Losses < preview.HomeRecord.Losses, ) @previewStatRow( fmt.Sprint(preview.HomeRecord.GoalsFor), "Goals For", fmt.Sprint(preview.AwayRecord.GoalsFor), preview.HomeRecord.GoalsFor > preview.AwayRecord.GoalsFor, preview.AwayRecord.GoalsFor > preview.HomeRecord.GoalsFor, ) @previewStatRow( fmt.Sprint(preview.HomeRecord.GoalsAgainst), "Goals Against", fmt.Sprint(preview.AwayRecord.GoalsAgainst), preview.HomeRecord.GoalsAgainst < preview.AwayRecord.GoalsAgainst, preview.AwayRecord.GoalsAgainst < preview.HomeRecord.GoalsAgainst, ) {{ homeDiff := preview.HomeRecord.GoalsFor - preview.HomeRecord.GoalsAgainst awayDiff := preview.AwayRecord.GoalsFor - preview.AwayRecord.GoalsAgainst }} @previewStatRow( fmt.Sprintf("%+d", homeDiff), "Goal Diff", fmt.Sprintf("%+d", awayDiff), homeDiff > awayDiff, awayDiff > homeDiff, )
} // seriesPreviewFormGuide renders recent form for each team. templ seriesPreviewFormGuide(series *db.PlayoffSeries, preview *db.MatchPreviewData) {

Recent Form

if series.Team1 != nil && series.Team1.Color != "" { }

{ seriesTeamName(series.Team1) }

if len(preview.HomeRecentGames) == 0 {

No recent matches played

} else {
for _, g := range preview.HomeRecentGames { @gameOutcomeIcon(g) }
for i := len(preview.HomeRecentGames) - 1; i >= 0; i-- { @recentGameRow(preview.HomeRecentGames[i]) }
}
if series.Team2 != nil && series.Team2.Color != "" { }

{ seriesTeamName(series.Team2) }

if len(preview.AwayRecentGames) == 0 {

No recent matches played

} else {
for _, g := range preview.AwayRecentGames { @gameOutcomeIcon(g) }
for i := len(preview.AwayRecentGames) - 1; i >= 0; i-- { @recentGameRow(preview.AwayRecentGames[i]) }
}
} // seriesPreviewRosters renders team rosters side-by-side. templ seriesPreviewRosters(series *db.PlayoffSeries, rosters map[string][]*db.PlayerWithPlayStatus) {

Team Rosters

if series.Team1 != nil { @seriesPreviewRosterColumn(series.Team1, rosters["team1"], series.Bracket.Season, series.Bracket.League) } if series.Team2 != nil { @seriesPreviewRosterColumn(series.Team2, rosters["team2"], series.Bracket.Season, series.Bracket.League) }
} templ seriesPreviewRosterColumn( team *db.Team, players []*db.PlayerWithPlayStatus, season *db.Season, league *db.League, ) { {{ var managers []*db.PlayerWithPlayStatus var roster []*db.PlayerWithPlayStatus for _, p := range players { if p.IsManager { managers = append(managers, p) } else { roster = append(roster, p) } } sort.Slice(roster, func(i, j int) bool { return roster[i].Player.DisplayName() < roster[j].Player.DisplayName() }) }}
if team.Color != "" { }

@links.TeamNameLinkInSeason(team, season, league)

{ fmt.Sprint(len(players)) } players
if len(players) == 0 {

No players on roster.

} else {
for _, p := range managers {
@links.PlayerLink(p.Player)
} for _, p := range roster {
@links.PlayerLink(p.Player)
}
}
}