import SwiftUI
import FirebaseFirestore

class ArtistManager: ObservableObject {
    @Published var artists: [Artist] = []
    @Published var isLoading: Bool = false
    @Published var errorMessage: String?

    private let db = Firestore.firestore()
    private var listener: ListenerRegistration?

    init() {}
    
    func fetchArtists() {
        isLoading = true
        errorMessage = nil

        // Query Firestore for users where isArtist == true
        listener = db.collection("user")
            .whereField("isArtist", isEqualTo: true)
            .addSnapshotListener { [weak self] querySnapshot, error in
                guard let self = self else { return }
                
                DispatchQueue.main.async {
                    self.isLoading = false
                    
                    if let error = error {
                        self.errorMessage = "Error fetching artists: \(error.localizedDescription)"
                        print("❌ Error fetching artists: \(error)")
                        return
                    }
                    
                    guard let documents = querySnapshot?.documents else {
                        self.errorMessage = "No artists found"
                        self.artists = []
                        return
                    }
                    
                    self.artists = documents.compactMap { document -> Artist? in
                        let data = document.data()
                        guard let displayName = data["displayName"] as? String,
                              let isArtist = data["isArtist"] as? Bool else {
                            return nil
                        }
                        
                        return Artist(
                            id: document.documentID,
                            displayName: displayName,
                            isArtist: isArtist,
                            bio: data["bio"] as? String,
                            tags: data["tags"] as? String,
                            avatarURL: data["avatarURL"] as? String,
                            coverURL: data["coverURL"] as? String
                        )
                    }
                    
                    print("✅ Fetched \(self.artists.count) artists")
                }
            }
    }

    func artistForID(_ id: String) -> Artist? {
        return artists.first(where: { $0.id == id })
    }

    func stopListening() {
        listener?.remove()
        listener = nil
    }
    
    deinit {
        stopListening()
    }
}

