import Foundation import ManaCore import Observation /// State-Maschine für ``ManaEmailVerifyGateView``. Wraps /// `AuthClient.resendVerification`. @MainActor @Observable public final class EmailVerifyGateViewModel { public enum Status: Equatable, Sendable { case idle case resending case resent(String) case error(String) } public let email: String public private(set) var status: Status = .idle private let auth: AuthClient private let sourceAppUrl: URL? public init(email: String, auth: AuthClient, sourceAppUrl: URL? = nil) { self.email = email self.auth = auth self.sourceAppUrl = sourceAppUrl } public var canResend: Bool { if case .resending = status { return false } return true } public var isResending: Bool { if case .resending = status { return true } return false } public func resend() async { status = .resending do { try await auth.resendVerification(email: email, sourceAppUrl: sourceAppUrl) status = .resent("Bestätigungs-Mail wurde verschickt. Schau in deinen Posteingang.") } catch let error as AuthError { status = .error(error.errorDescription ?? "Senden fehlgeschlagen") } catch { status = .error(String(describing: error)) } } }