// // LoserRoundSettingsView.swift // PadelClub // // Created by Razmig Sarkissian on 01/06/2024. // import SwiftUI import LeStorage struct LoserRoundSettingsView: View { @EnvironmentObject var dataStore: DataStore @Environment(\.isEditingTournamentSeed) private var isEditingTournamentSeed @Environment(Tournament.self) var tournament: Tournament @State var upperBracketRound: UpperRound var body: some View { List { Section { RowButtonView(isEditingTournamentSeed.wrappedValue == true ? "Terminer l'édition" : "Éditer les tours joués") { isEditingTournamentSeed.wrappedValue.toggle() } } Section { @Bindable var round: Round = upperBracketRound.round Picker(selection: $round.loserBracketMode) { ForEach(LoserBracketMode.allCases) { Text($0.localizedLoserBracketMode()).tag($0) } } label: { Text("Position des perdants") } .onChange(of: round.loserBracketMode) { do { try self.tournament.tournamentStore.rounds.addOrUpdate(instance: upperBracketRound.round) } catch { Logger.error(error) } } } header: { Text("Matchs de classement") } footer: { Text(upperBracketRound.round.loserBracketMode.localizedLoserBracketModeDescription()) } Section { RowButtonView("Synchroniser les noms des matchs") { let allRoundMatches = upperBracketRound.loserRounds.flatMap({ $0.allMatches }) allRoundMatches.forEach({ $0.name = $0.roundTitle() }) do { try self.tournament.tournamentStore.matches.addOrUpdate(contentOfs: allRoundMatches) } catch { Logger.error(error) } } } Section { RowButtonView("Effacer les matchs de classements", role: .destructive) { upperBracketRound.round.deleteLoserBracket() } } .disabled(upperBracketRound.round.loserRounds().isEmpty) Section { RowButtonView("Créer les matchs de classements", role: .destructive) { upperBracketRound.round.buildLoserBracket() upperBracketRound.round.disabledMatches().forEach { match in match.disableMatch() } do { try self.tournament.tournamentStore.matches.addOrUpdate(contentOfs: upperBracketRound.round.allLoserRoundMatches()) } catch { Logger.error(error) } } } .disabled(upperBracketRound.round.loserRounds().isEmpty == false) //todo proposer ici l'impression des matchs de classements peut-être? } } } //#Preview { // LoserRoundSettingsView() //}