//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//

import Foundation
import Amplify
import AWSPluginsCore

protocol LoggingConstraintsLocalStore {
    func getLocalLoggingConstraints() -> LoggingConstraints?
    func setLocalLoggingConstraints(loggingConstraints: LoggingConstraints)
    func getLocalLoggingConstraintsEtag() -> String?
    func setLocalLoggingConstraintsEtag(etag: String)
    func reset()
}

extension UserDefaults: LoggingConstraintsLocalStore {
    func getLocalLoggingConstraints() -> LoggingConstraints? {
        if let data = UserDefaults.standard.object(forKey: PluginConstants.awsRemoteLoggingConstraintsKey) as? Data {
            return try? JSONDecoder().decode(LoggingConstraints.self, from: data)
        }
        return nil
    }

    func setLocalLoggingConstraints(loggingConstraints: LoggingConstraints) {
        if let encoded = try? JSONEncoder().encode(loggingConstraints) {
            UserDefaults.standard.set(encoded, forKey: PluginConstants.awsRemoteLoggingConstraintsKey)
        }
    }

    func getLocalLoggingConstraintsEtag() -> String? {
        return UserDefaults.standard.string(forKey: PluginConstants.awsRemoteLoggingConstraintsTagKey)
    }

    func setLocalLoggingConstraintsEtag(etag: String) {
        UserDefaults.standard.set(etag, forKey: PluginConstants.awsRemoteLoggingConstraintsTagKey)
    }

    func reset() {
        UserDefaults.standard.removeObject(forKey: PluginConstants.awsRemoteLoggingConstraintsTagKey)
        UserDefaults.standard.removeObject(forKey: PluginConstants.awsRemoteLoggingConstraintsKey)
    }
}