import 'package:flux/features/tracking/models/tracking_model.dart'; import 'package:get_it/get_it.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class TrackingRepository { final SupabaseClient _supabase = GetIt.I.get(); TrackingRepository(); /// Recupera la cronologia di un'entità (Ticket o Operazione) Future> getTrackingsByParent({ required String parentId, // <-- Reso obbligatorio required TrackingParentType parentType, // <-- Reso obbligatorio }) async { // Facciamo la query con la JOIN per recuperare il nome dello staff al volo final response = await _supabase .from('tracking') .select('*, staff_member(name)') .eq('parent_id', parentId) .eq('parent_type', parentType.name) .order('created_at', ascending: false); return response.map((map) => TrackingModel.fromMap(map)).toList(); } /// Inserisce un nuovo evento di tracking Future logEvent(TrackingModel tracking) async { await _supabase.from('tracking').insert(tracking.toMap()); } /// Metodo helper rapido per loggare un cambio di stato o una nota Future logQuickEvent({ required String companyId, required String message, required TrackingType type, required String parentId, // <-- Reso obbligatorio required TrackingParentType parentType, // <-- Reso obbligatorio String? staffId, bool isInternal = true, }) async { final log = TrackingModel( createdAt: DateTime.now(), // Questo verrà ignorato dal toMap in fase di insert, ma serve al modello companyId: companyId, staffId: staffId, parentId: parentId, parentType: parentType, eventType: type, isInternal: isInternal, message: message, ); await logEvent(log); } }