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

import Foundation

public struct ProjectSchema: Codable, Equatable {
    public var clipCount: Int
    public var currentPage: Int
    public var description: String
    public var id: Id
    public var imageUrl: String?
    public var isOwned: Bool
    public var isTrashed: Bool
    public var name: String
    /// CollaboratorSchema
    public var owner: CollaboratorSchema?
    public var pinnedClips: [ProjectClipSchema]?
    public var projectClips: [ProjectClipSchema]
    public var shared: Bool

    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(clipCount: Int, currentPage: Int, description: String, id: Id, imageUrl: String? = nil, isOwned: Bool, isTrashed: Bool, name: String, owner: CollaboratorSchema? = nil, pinnedClips: [ProjectClipSchema]? = nil, projectClips: [ProjectClipSchema], shared: Bool) {
        self.clipCount = clipCount
        self.currentPage = currentPage
        self.description = description
        self.id = id
        self.imageUrl = imageUrl
        self.isOwned = isOwned
        self.isTrashed = isTrashed
        self.name = name
        self.owner = owner
        self.pinnedClips = pinnedClips
        self.projectClips = projectClips
        self.shared = shared
    }
}
