import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:travel_mate/models/group.dart';
import 'package:travel_mate/services/error_service.dart';

class GroupService {
  final _errorService = ErrorService();
  final FirebaseFirestore _firestore = FirebaseFirestore.instance;

  Stream<List<Group>> getGroupsStream() {
    return _firestore.collection('groups').snapshots().map((snapshot) {
      return snapshot.docs.map((doc) {
        return Group.fromMap(doc.data(), doc.id);
      }).toList();
    });
  }

  Future<bool> createGroup(Group group) async {
    try {
      await _firestore.collection('groups').add(group.toMap());
      return true;
    } catch (e) {
      _errorService.logError('Erreur lors de la création du groupe: $e', StackTrace.current);
      return false;
    }
  }

  Future<bool> updateGroup(Group group) async {
    try {
      await _firestore.collection('groups').doc(group.id).update(group.toMap());
      return true;
    } catch (e) {
      _errorService.logError('Erreur lors de la mise à jour du groupe: $e', StackTrace.current);
      return false;
    }
  }

  Future<bool> deleteGroup(String groupId) async {
    try {
      await _firestore.collection('groups').doc(groupId).delete();
      return true;
    } catch (e) {
      _errorService.logError('Erreur lors de la suppression du groupe: $e', StackTrace.current);
      return false;
    }
  }

  // Stream pour obtenir les groupes d'un utilisateur spécifique
  Stream<List<Group>> getGroupsStreamByUser(String userId) {
    return _firestore
        .collection('groups')
        .where('members', arrayContains: userId)
        .snapshots()
        .map((snapshot) {
      return snapshot.docs.map((doc) {
        final group = Group.fromMap(doc.data(), doc.id);
        _errorService.logError('Groupe: ${group.name}, Membres: ${group.members.length}', StackTrace.current);
        return group;
      }).toList();
    });
  }
}