//
//  CollectDefaults.swift
//  Funny_sounds
//
//  Created by 忆海16 on 2024/8/19.
//

import Foundation
class collectManager {
    static let shared = collectManager() // 单例模式
    
    private let favoritesKey = "favoriteAudioFiles" // UserDefaults的key
    
    private init() {} // 私有化构造方法
    
    // 切换收藏状态
    func toggleFavorite(audioFile: AudioFile) {
        var favorites = loadFavorites()
        
        if let index = favorites.firstIndex(where: { $0.title == audioFile.title }) {
            // 如果音频文件已经被收藏，则取消收藏
            favorites.remove(at: index)
            print("音频文件已从收藏中移除")
        } else {
            // 如果音频文件未被收藏，则添加到收藏
            favorites.append(audioFile)
            print("音频文件已添加到收藏")
        }
        
        // 更新收藏列表到UserDefaults
        saveFavorites(favorites)
    }
    
    // 检查音频文件是否已收藏
    func isFavorite(audioFile: AudioFile) -> Bool {
        let favorites = loadFavorites()
        return favorites.contains(where: { $0.title == audioFile.title })
    }
    
    // 获取所有收藏的音频文件
    func getAllFavorites() -> [AudioFile] {
        return loadFavorites()
    }
    
    // 清空所有收藏的音频文件
    func clearFavorites() {
        saveFavorites([])
        print("所有收藏已清空")
    }
    
    // 私有方法：保存收藏列表
    private func saveFavorites(_ audioFiles: [AudioFile]) {
        let encoder = JSONEncoder()
        do {
            let data = try encoder.encode(audioFiles)
            UserDefaults.standard.set(data, forKey: favoritesKey)
        } catch {
            print("保存AudioFile数据时出错: \(error)")
        }
    }
    
    // 私有方法：加载收藏列表
    private func loadFavorites() -> [AudioFile] {
        if let data = UserDefaults.standard.data(forKey: favoritesKey) {
            let decoder = JSONDecoder()
            do {
                let audioFiles = try decoder.decode([AudioFile].self, from: data)
                return audioFiles
            } catch {
                print("读取AudioFile数据时出错: \(error)")
            }
        }
        return []
    }
}
