// Generated by Create API
// https://github.com/CreateAPI/CreateAPI

import Foundation

public struct ChatMessage: Codable, Equatable {
    public var channelId: String?
    public var channelType: String?
    public var chatId: String?
    public var chatText: String?
    public var createdAt: Date?
    public var id: Id?
    public var isFlagged: Bool?
    public var moderationReasons: String?
    public var moderationStatus: String?
    public var userAvatarUrl: String?
    public var userName: String?

    public struct Id: Codable, Equatable {
        public var uuid: UUID?
        public var string: String?

        public init(uuid: UUID? = nil, string: String? = nil) {
            self.uuid = uuid
            self.string = string
        }

        public init(from decoder: Decoder) throws {
            let container = try decoder.singleValueContainer()
            self.uuid = try? container.decode(UUID.self)
            self.string = try? container.decode(String.self)
        }

        public func encode(to encoder: Encoder) throws {
            var container = encoder.singleValueContainer()
            if let value = uuid { try container.encode(value) }
            if let value = string { try container.encode(value) }
        }
    }

    public init(channelId: String? = nil, channelType: String? = nil, chatId: String? = nil, chatText: String? = nil, createdAt: Date? = nil, id: Id? = nil, isFlagged: Bool? = nil, moderationReasons: String? = nil, moderationStatus: String? = nil, userAvatarUrl: String? = nil, userName: String? = nil) {
        self.channelId = channelId
        self.channelType = channelType
        self.chatId = chatId
        self.chatText = chatText
        self.createdAt = createdAt
        self.id = id
        self.isFlagged = isFlagged
        self.moderationReasons = moderationReasons
        self.moderationStatus = moderationStatus
        self.userAvatarUrl = userAvatarUrl
        self.userName = userName
    }
}
