//
//  NCManageDatabase.swift
//  Nextcloud
//
//  Created by Marino Faggiana on 06/05/17.
//  Copyright © 2017 TWS. All rights reserved.
//

import RealmSwift

class NCManageDatabase: NSObject {
        
    static let sharedInstance: NCManageDatabase = {
        let instance = NCManageDatabase()
        return instance
    }()
    
    override init() {
        
        let dirGroup = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: k_capabilitiesGroups)
        var config = Realm.Configuration()
        
        config.fileURL = dirGroup?.appendingPathComponent("\(appDatabaseNextcloud)/\(k_databaseDefault)")
        
        Realm.Configuration.defaultConfiguration = config
    }
    
    func clearDB(_ table : Object.Type, account: String?) {
        
        let results : Results<Object>
        let realm = try! Realm()
        
        if (account != nil) {
            
            results = realm.objects(table).filter("account = \(account!)")

        } else {
         
            results = realm.objects(table)
        }
    
        try! realm.write {
            realm.delete(results)
        }
    }
    
    func addActivityServer(_ listOfActivity: [OCActivity], account: String) {
    
        let realm = try! Realm()
        
        try! realm.write {
            
            for activity in listOfActivity {
                
                // Verify
                let records = realm.objects(DBActivity.self).filter("idActivity = \(activity.idActivity)")
                if (records.count > 0) {
                    continue
                }
                
                // Add new Activity
                let dbActivity = DBActivity()
                
                dbActivity.account = account
                dbActivity.date = activity.date
                dbActivity.idActivity = Double(activity.idActivity)
                dbActivity.link = activity.link
                dbActivity.note = activity.subject
                dbActivity.type = k_activityTypeInfo

                realm.add(dbActivity)
            }
        }
    }
    
    func addActivityClient(_ file: String, fileID: String, action: String, selector: String, note: String, type: String, verbose: Bool, account: String?, activeUrl: String?) {

        var noteReplacing : String = ""
        
        if (activeUrl != nil) {
            noteReplacing = note.replacingOccurrences(of: "\(activeUrl!)\(webDAV)", with: "")
        }
        noteReplacing = note.replacingOccurrences(of: "\(k_domain_session_queue).", with: "")

        let realm = try! Realm()
        
        try! realm.write {

            // Add new Activity
            let dbActivity = DBActivity()

            if (account != nil) {
                dbActivity.account = account!
            }
            
            dbActivity.action = action
            dbActivity.file = file
            dbActivity.fileID = fileID
            dbActivity.note = noteReplacing
            dbActivity.selector = selector
            dbActivity.type = type
            dbActivity.verbose = verbose

            realm.add(dbActivity)
        }
    }
    
    func getAllTableActivityWithPredicate(_ predicate : NSPredicate) -> [DBActivity] {
        
        let realm = try! Realm()

        let results = realm.objects(DBActivity.self).filter(predicate).sorted(byKeyPath: "date", ascending: false)
        
        return Array(results)
    }
}