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

import Foundation

public struct MediaResponse: Codable, Equatable {
    public var comment: String?
    public var createdAt: Date
    public var createdBy: Int?
    public var description: String?
    public var id: Id
    public var isAccepted: Bool?
    public var mediaType: String
    public var metadata: [String: AnyJSON]?
    public var order: Int
    public var projectId: ProjectId
    public var referenceType: String
    public var timeRanges: [[String: AnyJSON]]?
    public var title: String
    public var updatedAt: Date
    public var uploadId: String?
    public var url: 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 struct ProjectId: 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(comment: String? = nil, createdAt: Date, createdBy: Int? = nil, description: String? = nil, id: Id, isAccepted: Bool? = nil, mediaType: String, metadata: [String: AnyJSON]? = nil, order: Int, projectId: ProjectId, referenceType: String, timeRanges: [[String: AnyJSON]]? = nil, title: String, updatedAt: Date, uploadId: String? = nil, url: String) {
        self.comment = comment
        self.createdAt = createdAt
        self.createdBy = createdBy
        self.description = description
        self.id = id
        self.isAccepted = isAccepted
        self.mediaType = mediaType
        self.metadata = metadata
        self.order = order
        self.projectId = projectId
        self.referenceType = referenceType
        self.timeRanges = timeRanges
        self.title = title
        self.updatedAt = updatedAt
        self.uploadId = uploadId
        self.url = url
    }
}
