// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. import Foundation import GRDB public struct QuotedReplyModel { public let threadId: String public let authorId: String public let timestampMs: Int64 public let body: String? public let attachment: Attachment? public let contentType: String? public let sourceFileName: String? public let thumbnailDownloadFailed: Bool public let currentUserPublicKey: String? public let currentUserBlinded15PublicKey: String? public let currentUserBlinded25PublicKey: String? // MARK: - Initialization init( threadId: String, authorId: String, timestampMs: Int64, body: String?, attachment: Attachment?, contentType: String?, sourceFileName: String?, thumbnailDownloadFailed: Bool, currentUserPublicKey: String?, currentUserBlinded15PublicKey: String?, currentUserBlinded25PublicKey: String? ) { self.attachment = attachment self.threadId = threadId self.authorId = authorId self.timestampMs = timestampMs self.body = body self.contentType = contentType self.sourceFileName = sourceFileName self.thumbnailDownloadFailed = thumbnailDownloadFailed self.currentUserPublicKey = currentUserPublicKey self.currentUserBlinded15PublicKey = currentUserBlinded15PublicKey self.currentUserBlinded25PublicKey = currentUserBlinded25PublicKey } public static func quotedReplyForSending( threadId: String, authorId: String, variant: Interaction.Variant, body: String?, timestampMs: Int64, attachments: [Attachment]?, linkPreviewAttachment: Attachment?, currentUserPublicKey: String?, currentUserBlinded15PublicKey: String?, currentUserBlinded25PublicKey: String? ) -> QuotedReplyModel? { guard variant == .standardOutgoing || variant == .standardIncoming else { return nil } guard (body != nil && body?.isEmpty == false) || attachments?.isEmpty == false else { return nil } let targetAttachment: Attachment? = (attachments?.first ?? linkPreviewAttachment) return QuotedReplyModel( threadId: threadId, authorId: authorId, timestampMs: timestampMs, body: body, attachment: targetAttachment, contentType: targetAttachment?.contentType, sourceFileName: targetAttachment?.sourceFilename, thumbnailDownloadFailed: false, currentUserPublicKey: currentUserPublicKey, currentUserBlinded15PublicKey: currentUserBlinded15PublicKey, currentUserBlinded25PublicKey: currentUserBlinded25PublicKey ) } }