package page import "git.haelnorr.com/h/oslstats/internal/db" import "git.haelnorr.com/h/oslstats/internal/view/layout" import "time" import "strconv" templ SeasonPage(season *db.Season) { @layout.Global(season.Name) {
@SeasonDetails(season)
} } templ SeasonDetails(season *db.Season) {

{ season.Name }

{ season.ShortName }

Regular Season

Start Date: { formatDate(season.StartDate) }
End Date: if !season.EndDate.IsZero() { { formatDate(season.EndDate.Time) } } else { Not set }
Duration: if !season.EndDate.IsZero() { { formatDuration(season.StartDate, season.EndDate.Time) } } else { Ongoing }

Finals

Start Date: if !season.FinalsStartDate.IsZero() { { formatDate(season.FinalsStartDate.Time) } } else { Not set }
End Date: if !season.FinalsEndDate.IsZero() { { formatDate(season.FinalsEndDate.Time) } } else { Not set }
Duration: if !season.FinalsStartDate.IsZero() && !season.FinalsEndDate.IsZero() { { formatDuration(season.FinalsStartDate.Time, season.FinalsEndDate.Time) } } else { Not scheduled }

Status

@SeasonStatus(season)
} templ SeasonStatus(season *db.Season) { {{ now := time.Now() status := "" statusColor := "" statusBg := "" if now.Before(season.StartDate) { status = "Upcoming" statusColor = "text-blue" statusBg = "bg-blue/10 border-blue" } else if !season.EndDate.IsZero() && now.After(season.EndDate.Time) { status = "Completed" statusColor = "text-green" statusBg = "bg-green/10 border-green" } else if !season.FinalsStartDate.IsZero() && now.After(season.FinalsStartDate.Time) { if !season.FinalsEndDate.IsZero() && now.After(season.FinalsEndDate.Time) { status = "Completed" statusColor = "text-green" statusBg = "bg-green/10 border-green" } else { status = "Finals in Progress" statusColor = "text-yellow" statusBg = "bg-yellow/10 border-yellow" } } else { status = "In Progress" statusColor = "text-green" statusBg = "bg-green/10 border-green" } }}
{ status }
} func formatDate(t time.Time) string { return t.Format("January 2, 2006") } func formatDuration(start, end time.Time) string { days := int(end.Sub(start).Hours() / 24) if days == 0 { return "Same day" } else if days == 1 { return "1 day" } else if days < 7 { return strconv.Itoa(days) + " days" } else if days < 30 { weeks := days / 7 if weeks == 1 { return "1 week" } return strconv.Itoa(weeks) + " weeks" } else if days < 365 { months := days / 30 if months == 1 { return "1 month" } return strconv.Itoa(months) + " months" } else { years := days / 365 if years == 1 { return "1 year" } return strconv.Itoa(years) + " years" } }