//
//  LocalStorage.swift
//  PaiAi
//
//  Created by mac on 2016/10/28.
//  Copyright © 2016年 FFIB. All rights reserved.
//

import UIKit

extension GroupItem: ArrayUserDefaultCodable {
    public init(value: [String: AnyObject]) {
        self.init(JSON: value)!
    }
    
    public func toDictionary() -> [String: AnyObject] {
        return toJSON() as [String : AnyObject]
    }
}

extension UserDefaults {
    struct GroupInfo: ArrayUserDefaultable {
        typealias Item = GroupItem

        enum ArrayDefaultKey: String {
            case recentGroup
        }
    }
}

public var ShareRecentGroupInfo = RecentGroupInfo()

public struct RecentGroupInfo {
    
    private var infos: [GroupItem]
    private var lock: NSLock
    public var count: Int {
        return infos.count
    }
    
    init() {
        infos = UserDefaults.GroupInfo.array(forKey: .recentGroup)
        lock = NSLock()
    }
    
    public subscript(index: Int) -> GroupItem {
        return infos[index]
    }
    
    mutating public func add(_ item: GroupItem) {
        lock.lock()
        infos.removeAll(where: { $0.group_id == item.group_id })
        
        if infos.count == 3 {
            infos.removeFirst()
        }
        
        infos.append(item)
        lock.unlock()
    }
    
    public func values() -> [GroupItem] {
        return infos.reversed()
    }
    
    public func save() {
        UserDefaults.GroupInfo.set(infos, forKey: .recentGroup)
    }
}