import 'package:cloud_firestore/cloud_firestore.dart'; import '../data/models/trip.dart'; class TripRepository { final FirebaseFirestore _firestore = FirebaseFirestore.instance; CollectionReference get _tripsCollection => _firestore.collection('trips'); // Récupérer tous les voyages d'un utilisateur Stream> getTripsByUserId(String userId) { print('🔍 Chargement des trips pour userId: $userId'); try { return _tripsCollection .where('participants', arrayContains: userId) .snapshots() .map((snapshot) { print('📦 Snapshot reçu: ${snapshot.docs.length} documents'); final trips = snapshot.docs .map((doc) { try { final data = doc.data() as Map; print('📄 Document ${doc.id}: ${data.keys.toList()}'); return Trip.fromMap(data, doc.id); } catch (e) { print('❌ Erreur parsing trip ${doc.id}: $e'); return null; } }) .whereType() .toList(); print('✅ ${trips.length} trips parsés avec succès'); return trips; }); } catch (e) { print('❌ Erreur getTripsByUserId: $e'); throw Exception('Erreur lors de la récupération des voyages: $e'); } } // Créer un voyage et retourner son ID Future createTrip(Trip trip) async { try { print('📝 Création du voyage: ${trip.title}'); final tripData = trip.toMap(); // Ne pas modifier les timestamps ici, ils sont déjà au bon format final docRef = await _tripsCollection.add(tripData); print('✅ Voyage créé avec ID: ${docRef.id}'); return docRef.id; } catch (e) { print('❌ Erreur création voyage: $e'); throw Exception('Erreur lors de la création du voyage: $e'); } } // Récupérer un voyage par son ID Future getTripById(String tripId) async { try { final doc = await _tripsCollection.doc(tripId).get(); if (!doc.exists) { print('⚠️ Voyage $tripId non trouvé'); return null; } return Trip.fromMap(doc.data() as Map, doc.id); } catch (e) { print('❌ Erreur getTripById: $e'); throw Exception('Erreur lors de la récupération du voyage: $e'); } } // Mettre à jour un voyage Future updateTrip(String tripId, Trip trip) async { try { print('📝 Mise à jour du voyage: $tripId'); final tripData = trip.toMap(); // Mettre à jour le timestamp de modification tripData['updatedAt'] = Timestamp.now(); await _tripsCollection.doc(tripId).update(tripData); print('✅ Voyage $tripId mis à jour'); } catch (e) { print('❌ Erreur mise à jour voyage: $e'); throw Exception('Erreur lors de la mise à jour du voyage: $e'); } } // Supprimer un voyage Future deleteTrip(String tripId) async { try { print('🗑️ Suppression du voyage: $tripId'); await _tripsCollection.doc(tripId).delete(); print('✅ Voyage $tripId supprimé'); } catch (e) { print('❌ Erreur suppression voyage: $e'); throw Exception('Erreur lors de la suppression du voyage: $e'); } } }