//
//  UserModel.swift
//  TraccarClient
//
//  Created by George Makhoul on 29/10/2023.
//  Copyright © 2023 Traccar. All rights reserved.
//

import Foundation

final class UserModel: KNObject {
    
    // MARK: - Properties
    var id: Int = 0
    var name: String = ""
    var first_name: String = ""
    var last_name: String = ""
    var email: String = ""
    var avatar: String = ""
//    var cover: String?
    var designation_id: Int = 0
    
    // MARK: - Init
    override init() {
        super.init()
    }
    
    init(_ dict: JSON, saveUser: Bool = false) {
        super.init()
        id = dict["id"] as? Int ?? 0
        name = dict["name"] as? String ?? ""
        first_name = dict["first_name"] as? String ?? ""
        last_name = dict["last_name"] as? String ?? ""
        email = dict["email"] as? String ?? ""
        avatar = dict["avatar"] as? String ?? ""
//        cover = dict["cover"] as? String ?? ""
        designation_id = dict["designation_id"] as? Int ?? 0
            
        if saveUser {
            saveToUserDefaults()
        }
    }
    
    //MARK: - Methods
    private func saveToUserDefaults() {
        let ud = UserDefaults.standard
        
        ud.set(id, forKey: Keys.User.id)
        ud.set(name, forKey: Keys.User.name)
        ud.set(first_name, forKey: Keys.User.firstName)
        ud.set(last_name, forKey: Keys.User.lastName)
        ud.set(email, forKey: Keys.User.email)
        ud.set(avatar, forKey: Keys.User.avatar)
//        ud.set(cover, forKey: Keys.User.cover)
        ud.set(designation_id, forKey: Keys.User.designation_id)
    }
    
    class func loadFromUserDefaults() -> UserModel {
        let ud = UserDefaults.standard
        var params: PARAMS = [:]
        
        if let id = ud.value(forKey: Keys.User.id) as? Int {
            params.add(key: .id, id)
        }
        if let full_name = ud.value(forKey: Keys.User.name) as? String {
            params.add(key: .name, full_name)
        }
        if let first_name = ud.value(forKey: Keys.User.firstName) as? String {
            params.add(key: .fName, first_name)
        }
        if let last_name = ud.value(forKey: Keys.User.lastName) as? String {
            params.add(key: .lName, last_name)
        }
        if let email = ud.value(forKey: Keys.User.email) as? String {
            params.add(key: .email, email)
        }
        if let avatar = ud.value(forKey: Keys.User.avatar) as? String {
            params.add(key: .avatar, avatar)
        }
//        if let cover = ud.value(forKey: Keys.User.cover) as? String {
//            params.add(key: .cover, cover)
//        }
        if let designation_id = ud.value(forKey: Keys.User.designation_id) as? String {
            params.add(key: .designation_id, designation_id)
        }
        
        return UserModel(params)
    }
    
    class func clearUserFromUserDefaults() {
        let ud = UserDefaults.standard
        
        ud.removeObject(forKey: Keys.User.id)
        ud.removeObject(forKey: Keys.User.name)
        ud.removeObject(forKey: Keys.User.firstName)
        ud.removeObject(forKey: Keys.User.lastName)
        ud.removeObject(forKey: Keys.User.email)
        ud.removeObject(forKey: Keys.User.avatar)
        ud.removeObject(forKey: Keys.User.designation_id)
    }
}