From eb112375fd1f8fb7b7e7314c28e8e9d218dcfd1d Mon Sep 17 00:00:00 2001 From: Raz Date: Thu, 22 May 2025 18:36:49 +0200 Subject: [PATCH] fix event sharing stuff --- PadelClubData/Data/Event.swift | 51 +++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/PadelClubData/Data/Event.swift b/PadelClubData/Data/Event.swift index ad560f0..15eb2ab 100644 --- a/PadelClubData/Data/Event.swift +++ b/PadelClubData/Data/Event.swift @@ -48,7 +48,7 @@ final public class Event: BaseEvent { // MARK: - Computed dependencies public var tournaments: [Tournament] { - DataStore.shared.tournaments.filter { $0.event == self.id && $0.isDeleted == false } + DataStore.shared.tournaments.filter { $0.event == self.id && $0.isDeleted == false }.sorted(by: \.startDate) } public func clubObject() -> Club? { @@ -103,6 +103,55 @@ final public class Event: BaseEvent { public func shareURL() -> URL? { return URL(string: URLs.main.url.appending(path: "event/\(id)").absoluteString.removingPercentEncoding!) } + + public func formattedDateInterval() -> String { + let tournaments = self.tournaments + guard !tournaments.isEmpty else { + return "" // Handle empty tournament list + } + + let firstTournament = tournaments.first! + let lastTournament = tournaments.last! + + // Helper to check if two dates are on the same day + func isSameDay(date1: Date, date2: Date) -> Bool { + return Calendar.current.isDate(date1, inSameDayAs: date2) + } + + // Scenario 1: Only one tournament + if tournaments.count == 1 { + return firstTournament.startDate.formattedAsDate() + } + + // Scenario 2: Multiple tournaments, but all start and end on the same day (single-day event overall) + let overallEventIsSingleDay = isSameDay(date1: firstTournament.startDate, date2: lastTournament.startDate) + + if overallEventIsSingleDay { + return firstTournament.startDate.formattedAsDate() + } + + // Scenario 3: Multiple tournaments, spanning multiple days (requires "Du ... au ...") + let startDay = firstTournament.startDate.localizedDay() + let endDay = lastTournament.startDate.localizedDay() + + let startMonthYear = firstTournament.startDate.monthYearFormatted + let endMonthYear = lastTournament.startDate.monthYearFormatted + + let calendar = Calendar.current + let firstStartComponents = calendar.dateComponents([.year, .month], from: firstTournament.startDate) + let lastEndComponents = calendar.dateComponents([.year, .month], from: lastTournament.startDate) + + if firstStartComponents.year == lastEndComponents.year && firstStartComponents.month == lastEndComponents.month { + // Same month and year: "Du 13 au 15 Juin 2025" + return "Du \(startDay) au \(endDay) \(startMonthYear)" + } else if firstStartComponents.year == lastEndComponents.year { + // Different months, same year: "Du 13 Juin au 15 Juillet 2025" + return "Du \(startDay) \(startMonthYear) au \(endDay) \(endMonthYear)" + } else { + // Different years: "Du 13 Juin 2025 au 15 Juin 2026" + return "Du \(startDay) \(startMonthYear) au \(endDay) \(endMonthYear)" + } + } func insertOnServer() throws { DataStore.shared.events.writeChangeAndInsertOnServer(instance: self)