// // EmailLog.swift // oAI // // Email processing log entry model // import Foundation enum EmailLogStatus: String, Codable { case success case error } struct EmailLog: Identifiable, Codable, Equatable { let id: UUID let timestamp: Date let sender: String let subject: String let emailContent: String // Preview of email body let aiResponse: String? // The AI's response (nil if error before response) let status: EmailLogStatus let errorMessage: String? // Error details if status == .error let tokens: Int? let cost: Double? let responseTime: TimeInterval? // Time to generate response in seconds let modelId: String? // Model that handled the email init( id: UUID = UUID(), timestamp: Date = Date(), sender: String, subject: String, emailContent: String, aiResponse: String? = nil, status: EmailLogStatus, errorMessage: String? = nil, tokens: Int? = nil, cost: Double? = nil, responseTime: TimeInterval? = nil, modelId: String? = nil ) { self.id = id self.timestamp = timestamp self.sender = sender self.subject = subject self.emailContent = emailContent self.aiResponse = aiResponse self.status = status self.errorMessage = errorMessage self.tokens = tokens self.cost = cost self.responseTime = responseTime self.modelId = modelId } static func == (lhs: EmailLog, rhs: EmailLog) -> Bool { lhs.id == rhs.id && lhs.sender == rhs.sender && lhs.subject == rhs.subject && lhs.status == rhs.status } } // MARK: - Display Helpers extension EmailLogStatus { var displayName: String { switch self { case .success: return "Success" case .error: return "Error" } } var iconName: String { switch self { case .success: return "checkmark.circle.fill" case .error: return "xmark.circle.fill" } } var color: String { switch self { case .success: return "green" case .error: return "red" } } }