// // PollVotingViewModel.swift // SportsTime // // ViewModel for voting on trip polls // import Foundation import SwiftUI @Observable @MainActor final class PollVotingViewModel { var rankings: [Int] = [] // Trip indices in preference order var isLoading = false var error: PollError? var didSubmit = false private let pollService = PollService.shared var canSubmit: Bool { !rankings.isEmpty } func initializeRankings(tripCount: Int, existingVote: PollVote?) { if let vote = existingVote { rankings = vote.rankings } else { // Default: trips in original order rankings = Array(0.. 0, index < rankings.count else { return } rankings.swapAt(index, index - 1) } func moveTripDown(at index: Int) { guard index >= 0, index < rankings.count - 1 else { return } rankings.swapAt(index, index + 1) } func submitVote(pollId: UUID) async { guard canSubmit else { return } isLoading = true error = nil do { let userId = try await pollService.getCurrentUserRecordID() let vote = PollVote( pollId: pollId, voterId: userId, rankings: rankings ) _ = try await pollService.submitVote(vote) didSubmit = true AnalyticsManager.shared.track(.pollVoted(pollId: pollId.uuidString)) } catch let pollError as PollError { error = pollError } catch { self.error = .unknown(error) } isLoading = false } func updateVote(existingVote: PollVote) async { guard canSubmit else { return } isLoading = true error = nil do { var updatedVote = existingVote updatedVote.rankings = rankings _ = try await pollService.updateVote(updatedVote) didSubmit = true } catch let pollError as PollError { error = pollError } catch { self.error = .unknown(error) } isLoading = false } func reset() { rankings = [] error = nil didSubmit = false } }