import Foundation

/// The backend serialises every timestamp with `Date.prototype.toISOString()`,
/// which always includes milliseconds (`...307Z`). `ISO8601DateFormatter`'s
/// default options reject that string, so every date in this app must go
/// through this helper rather than a bare `ISO8601DateFormatter()` — using
/// the wrong one is a silent-failure trap, not a compile error.
enum ISO8601 {
    private static let withFractional: ISO8601DateFormatter = {
        let f = ISO8601DateFormatter()
        f.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
        return f
    }()

    private static let withoutFractional: ISO8601DateFormatter = {
        let f = ISO8601DateFormatter()
        f.formatOptions = [.withInternetDateTime]
        return f
    }()

    static func parse(_ string: String?) -> Date? {
        guard let string else { return nil }
        return withFractional.date(from: string) ?? withoutFractional.date(from: string)
    }
}
