//
//  PrivateNote.swift
//  CoreDataStack
//
//  Created by MainasuK Cirno on 2021-4-1.
//

import CoreData
import Foundation

final public class PrivateNote: NSManagedObject {
    
    @NSManaged public private(set) var note: String?
    
    @NSManaged public private(set) var updatedAt: Date
    
    // many-to-one relationship
    @NSManaged public private(set) var to: MastodonUser?
    @NSManaged public private(set) var from: MastodonUser
    
}

extension PrivateNote {
    public override func awakeFromInsert() {
        super.awakeFromInsert()
        setPrimitiveValue(Date(), forKey: #keyPath(PrivateNote.updatedAt))
    }
    
    @discardableResult
    public static func insert(
        into context: NSManagedObjectContext,
        property: Property
    ) -> PrivateNote {
        let privateNode: PrivateNote = context.insertObject()
        privateNode.note = property.note
        return privateNode
    }
}

extension PrivateNote {
    public struct Property {
        public let note: String?
        
        init(note: String) {
            self.note = note
        }
    }
    
}

extension PrivateNote: Managed {
    public static var defaultSortDescriptors: [NSSortDescriptor] {
        return [NSSortDescriptor(keyPath: \PrivateNote.updatedAt, ascending: false)]
    }
}