import SwiftUI import FlaroDesign import MediaKit /// Die Detailseite auf dem Fernseher. /// /// Fassung eins zeigt, worum es geht, und lässt es abspielen. Staffeln und /// Folgen kommen im nächsten Schritt — bis dahin führt eine Serie über /// `QuickPlay` zur nächsten ungesehenen Folge, genau wie die Kachel. struct TVDetailView: View { let route: MediaRoute @Environment(FlaroSession.self) private var session @Environment(PlaybackCoordinator.self) private var playback @Environment(QuickPlay.self) private var quickPlay @State private var state: LoadState = .loading var body: some View { Group { switch state { case .loading: ProgressView().frame(maxWidth: .infinity, maxHeight: .infinity) case .failed(let meldung): VStack(spacing: FlaroSpacing.regular) { Text(meldung).font(.flaroBody).foregroundStyle(.white) Button("action.retry") { Task { await lade() } } } case .loaded(let item): TVHeroSection( item: item, onPlay: { quickPlay.start(item, backend: session.backend, coordinator: playback) }, onDetails: {} ) .ignoresSafeArea() } } .task { await lade() } } private func lade() async { guard let backend = session.backend else { return } state = await LoadState.load(keepingPrevious: state) { try await backend.item(id: route.ratingKey) } } }