import 'package:cloud_firestore/cloud_firestore.dart'; import '../data/models/trip.dart'; class TripRepository { final FirebaseFirestore _firestore; TripRepository({FirebaseFirestore? firestore}) : _firestore = firestore ?? FirebaseFirestore.instance; // Créer un voyage Future createTrip(Trip trip) async { try { final docRef = await _firestore.collection('trips').add(trip.toMap()); final createdTrip = trip.copyWith(id: docRef.id); // Mettre à jour avec l'ID généré await docRef.update({'id': docRef.id}); return createdTrip; } catch (e) { throw Exception('Erreur lors de la création du voyage: $e'); } } // Récupérer les voyages d'un utilisateur Stream> getUserTrips(String userId) { return _firestore .collection('trips') .where('createdBy', isEqualTo: userId) .snapshots() .map((snapshot) { return snapshot.docs.map((doc) { final data = doc.data(); return Trip.fromMap({...data, 'id': doc.id}); }).toList(); }); } // Récupérer les voyages où l'utilisateur est participant Stream> getSharedTrips(String userId) { return _firestore .collection('trips') .where('participants', arrayContains: userId) .snapshots() .map((snapshot) { return snapshot.docs.map((doc) { final data = doc.data(); return Trip.fromMap({...data, 'id': doc.id}); }).toList(); }); } // Récupérer un voyage par ID Future getTripById(String tripId) async { try { final doc = await _firestore.collection('trips').doc(tripId).get(); if (doc.exists) { final data = doc.data() as Map; return Trip.fromMap({...data, 'id': doc.id}); } return null; } catch (e) { throw Exception('Erreur lors de la récupération du voyage: $e'); } } // Mettre à jour un voyage Future updateTrip(Trip trip) async { try { await _firestore .collection('trips') .doc(trip.id) .update(trip.toMap()); return true; } catch (e) { throw Exception('Erreur lors de la mise à jour du voyage: $e'); } } // Supprimer un voyage Future deleteTrip(String tripId) async { try { await _firestore.collection('trips').doc(tripId).delete(); return true; } catch (e) { throw Exception('Erreur lors de la suppression du voyage: $e'); } } // Ajouter un participant Future addParticipant(String tripId, String participantEmail) async { try { await _firestore.collection('trips').doc(tripId).update({ 'participants': FieldValue.arrayUnion([participantEmail]) }); return true; } catch (e) { throw Exception('Erreur lors de l\'ajout du participant: $e'); } } // Retirer un participant Future removeParticipant(String tripId, String participantEmail) async { try { await _firestore.collection('trips').doc(tripId).update({ 'participants': FieldValue.arrayRemove([participantEmail]) }); return true; } catch (e) { throw Exception('Erreur lors du retrait du participant: $e'); } } }