//
//  PreferenceManager.swift
//  Funny_sounds
//
//  Created by 忆海16 on 2024/8/27.
//

import Foundation
import UIKit

class PreferenceManager {
    static let shared = PreferenceManager()
    private let preferencesKey = "userPreferences"  // 偏好设置的键值
    
    private init() {}
    // MARK: - 保存一个新的偏好设置
    func savePreference(_ preference: UserPreference) {
        var preferences = loadPreferences() ?? [UserPreference]()
        preferences.append(preference)  // 将新偏好设置添加到数组中
        savePreferences(preferences)    // 保存更新后的数组
    }

    // MARK: - 保存所有偏好设置
    private func savePreferences(_ preferences: [UserPreference]) {
        if let encodedPreferences = try? JSONEncoder().encode(preferences) {
            UserDefaults.standard.set(encodedPreferences, forKey: preferencesKey)  // 将偏好设置数组保存到UserDefaults中
        }
    }

    // MARK: - 加载所有偏好设置
    func loadPreferences() -> [UserPreference]? {
        guard let savedData = UserDefaults.standard.data(forKey: preferencesKey),
              let preferences = try? JSONDecoder().decode([UserPreference].self, from: savedData) else {
            return nil  // 如果未找到数据或解码失败，返回nil
        }
        return preferences  // 返回偏好设置数组
    }

    // MARK: - 清除所有偏好设置
    func clearPreferences() {
        UserDefaults.standard.removeObject(forKey: preferencesKey)  // 从UserDefaults中移除偏好设置
    }

    // MARK: - 保存音频
    func saveAudio(data: Data, fileName: String) -> Bool {
        let fileURL = getDocumentsDirectory().appendingPathComponent(fileName)
        do {
            try data.write(to: fileURL)  // 将音频数据写入文件
            return true
        } catch {
            print("保存音频失败: \(error.localizedDescription)")
            return false
        }
    }

    // MARK: - 保存图片
    func saveImage(image: UIImage, fileName: String) -> Bool {
        guard let data = image.pngData() else { return false }
        let fileURL = getDocumentsDirectory().appendingPathComponent(fileName)
        do {
            try data.write(to: fileURL)  // 将图片数据写入文件
            return true
        } catch {
            print("保存图片失败: \(error.localizedDescription)")
            return false
        }
    }

    // MARK: - 加载音频
    func loadAudio(fileName: String) -> Data? {
        let fileURL = getDocumentsDirectory().appendingPathComponent(fileName)
        return try? Data(contentsOf: fileURL)  // 从文件中加载音频数据
    }

    // MARK: - 加载图片
    func loadImage(fileName: String) -> UIImage? {
        let fileURL = getDocumentsDirectory().appendingPathComponent(fileName)
        guard let data = try? Data(contentsOf: fileURL) else { return nil }
        return UIImage(data: data)  // 从文件中加载图片数据
    }

    // MARK: - 获取文档目录路径
    private func getDocumentsDirectory() -> URL {
        return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    }
}
