package seasonsview import "git.haelnorr.com/h/oslstats/internal/db" import "git.haelnorr.com/h/oslstats/internal/view/component/links" import "fmt" // seriesMatchAnalysisTab renders the full Match Analysis tab for completed series. // Shows final series score, individual match results, aggregated team stats, // top performers, and league context. templ seriesMatchAnalysisTab( series *db.PlayoffSeries, rosters map[string][]*db.PlayerWithPlayStatus, preview *db.MatchPreviewData, ) {
@seriesAnalysisScoreHeader(series) if len(series.Matches) > 0 { @seriesAnalysisMatchResults(series) } if preview != nil { @seriesAnalysisLeagueContext(series, preview) }
} // seriesAnalysisScoreHeader renders the final series score in a prominent display. templ seriesAnalysisScoreHeader(series *db.PlayoffSeries) { {{ team1Won := series.WinnerTeamID != nil && series.Team1ID != nil && *series.WinnerTeamID == *series.Team1ID team2Won := series.WinnerTeamID != nil && series.Team2ID != nil && *series.WinnerTeamID == *series.Team2ID }}

Final Series Score

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

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

{ fmt.Sprint(series.Team1Wins) } if team1Won { Winner }
if series.Team2 != nil && series.Team2.Color != "" {
}

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

{ fmt.Sprint(series.Team2Wins) } if team2Won { Winner }
} // seriesAnalysisMatchResults shows individual match results as a compact list. templ seriesAnalysisMatchResults(series *db.PlayoffSeries) {

Match Results

for _, match := range series.Matches { @seriesAnalysisMatchRow(series, match) }
} templ seriesAnalysisMatchRow(series *db.PlayoffSeries, match *db.PlayoffMatch) { {{ matchLabel := fmt.Sprintf("Game %d", match.MatchNumber) isCompleted := match.Status == "completed" }}
{ matchLabel } if isCompleted { Complete } else { { match.Status } }
if match.FixtureID != nil { View Details }
} // seriesAnalysisLeagueContext shows how the teams sit in the league standings. templ seriesAnalysisLeagueContext(series *db.PlayoffSeries, preview *db.MatchPreviewData) {

League Context

if series.Team1 != nil && series.Team1.Color != "" { } { seriesTeamShortName(series.Team1) }
{ seriesTeamShortName(series.Team2) } if series.Team2 != nil && series.Team2.Color != "" { }
{{ 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.Sprintf("%d-%d-%d-%d", preview.HomeRecord.Wins, preview.HomeRecord.OvertimeWins, preview.HomeRecord.OvertimeLosses, preview.HomeRecord.Losses, ), "Record", fmt.Sprintf("%d-%d-%d-%d", preview.AwayRecord.Wins, preview.AwayRecord.OvertimeWins, preview.AwayRecord.OvertimeLosses, preview.AwayRecord.Losses, ), false, false, ) {{ 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, ) if len(preview.HomeRecentGames) > 0 || len(preview.AwayRecentGames) > 0 {
for _, g := range preview.HomeRecentGames { @gameOutcomeIcon(g) }
Form
for _, g := range preview.AwayRecentGames { @gameOutcomeIcon(g) }
}
}