// // SeriesRow.swift // IceGlass-iOS // // Copyright 2026 Rouslan Zenetl. All Rights Reserved. // import SwiftUI struct SeriesRow: View { let item: MainService.RoundSeriesItem private static let logoSize: CGFloat = 40 var body: some View { Button(action: open) { HStack(alignment: .center, spacing: 10) { matchupBlock Spacer(minLength: 8) rightContent } .padding(.horizontal, 14) .padding(.vertical, 8) .contentShape(Rectangle()) } .buttonStyle(.plain) } private var matchupBlock: some View { let bottom = item.series.bottomSeedTeam?.abbrev ?? "TBD" let top = item.series.topSeedTeam?.abbrev ?? "TBD" return HStack(spacing: 6) { TeamLogo(abbrev: bottom, size: Self.logoSize) Text(bottom) .font(.title3.monospaced()) .fontWeight(.semibold) .foregroundStyle(.primary) .lineLimit(1) .fixedSize() Text(seriesScore) .font(.title3.monospaced()) .fontWeight(.bold) .foregroundStyle(.secondary) .lineLimit(1) .fixedSize() .padding(.horizontal, 2) Text(top) .font(.title3.monospaced()) .fontWeight(.semibold) .foregroundStyle(.primary) .lineLimit(1) .fixedSize() TeamLogo(abbrev: top, size: Self.logoSize) } } private var rightContent: some View { VStack(alignment: .trailing, spacing: 2) { Text(statusText) .font(.subheadline) .fontWeight(.medium) .foregroundStyle(.secondary) if let trailing = trailingText { Text(trailing) .font(.caption2) .foregroundStyle(.tertiary) } } } private var seriesScore: String { "\(item.series.bottomSeedWins)–\(item.series.topSeedWins)" } private var statusText: String { if let winner = item.series.winner { return "\(winner) wins" } if let n = item.series.nextGameNumber { return "Game \(n)" } return "" } private var trailingText: String? { guard item.series.winner == nil else { return "Final" } return item.nextGame?.nextGameLabel } private func open() { guard let urlString = item.series.fullSeriesUrl, let url = URL(string: urlString) else { return } UIApplication.shared.open(url) } }