import Foundation

final class FileToAdd: ObservableObject {

    let id: Int

    unowned let content: Content

    // The external path to the file, or nil if the file is just a placeholder
    let url: URL?

    @Published
    var uniqueId: String

    @Published
    var isSelected: Bool = true

    init(content: Content, url: URL) {
        self.id = .random()
        self.content = content
        self.url = url
        self.uniqueId = url.lastPathComponent
    }

    init(content: Content, externalFile: String) {
        self.id = .random()
        self.content = content
        self.url = nil
        self.uniqueId = externalFile
    }

    var idAlreadyExists: Bool {
        content.files.contains { $0.identifier == uniqueId }
    }
}

extension FileToAdd: Identifiable {

}

extension FileToAdd: Equatable {

    static func == (lhs: FileToAdd, rhs: FileToAdd) -> Bool {
        lhs.url == rhs.url
    }
}

extension FileToAdd: Hashable {

    func hash(into hasher: inout Hasher) {
        hasher.combine(url)
    }
}

