import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/core/blocs/session/session_cubit.dart'; import 'package:flux/features/tracking/data/tracking_repository.dart'; import 'package:flux/features/tracking/models/tracking_model.dart'; import 'package:get_it/get_it.dart'; // Stati base: initial, loading, loaded, error class TrackingState { final bool isLoading; final List logs; TrackingState({this.isLoading = false, this.logs = const []}); } class TrackingCubit extends Cubit { final TrackingRepository _repo = GetIt.I.get(); final String parentId; final TrackingParentType parentType; final String companyId = GetIt.I.get().state.company!.id!; TrackingCubit({required this.parentId, required this.parentType}) : super(TrackingState()) { loadTrackings(); } Future loadTrackings() async { emit(TrackingState(isLoading: true, logs: state.logs)); final trackings = await _repo.getTrackingsByParent( parentId: parentId, parentType: parentType, ); emit(TrackingState(isLoading: false, logs: trackings)); } Future addManualNote( String message, bool isInternal, { String? staffId, }) async { // Aggiungiamo un feedback visivo immediato (Optimistic UI) se vogliamo, // oppure semplicemente mostriamo il loading await _repo.logQuickEvent( companyId: companyId, message: message, type: TrackingType.manualNote, parentId: parentId, parentType: parentType, staffId: staffId, isInternal: isInternal, ); // Ricarichiamo la lista fresca dal server await loadTrackings(); } }