import 'package:flux/features/master_data/staff/models/staff_member_model.dart'; import 'package:flux/features/master_data/store/models/store_model.dart'; import 'package:get_it/get_it.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class StaffRepository { final SupabaseClient _supabase = GetIt.I.get(); // --- ANAGRAFICA PURA --- // Prende tutto lo staff della Company (per l'Hub Anagrafiche) Future> getStaffMembers(String companyId) async { final response = await _supabase .from('staff_member') .select() .eq('company_id', companyId) .order('name', ascending: true); return (response as List).map((s) => StaffMemberModel.fromJson(s)).toList(); } Future saveStaffMember(StaffMemberModel member) async { final response = await _supabase .from('staff_member') .upsert(member.toJson()) .select() .single(); return StaffMemberModel.fromJson(response); } // --- LOGICA DI GIUNZIONE (Staff <-> Store) --- // Recupera i membri assegnati a uno specifico negozio // Qui facciamo una JOIN per avere i dati del membro partendo dalla tabella di giunzione Future> getStaffMembersInStore(String storeId) async { final response = await _supabase .from('staff_in_stores') .select( 'staff_member (*)', ) // Prende tutti i campi della tabella staff_member collegata .eq('store_id', storeId); return (response as List) .map((item) => StaffMemberModel.fromJson(item['staff_member'])) .toList(); } // Recupera i negozi assegnati a uno specifico membro // Qui facciamo una JOIN per avere i dati del membro partendo dalla tabella di giunzione Future> getStaffMemberStore(String staffId) async { final response = await _supabase .from('staff_in_stores') .select( 'store (*)', ) // Prende tutti i campi della tabella store collegata .eq('staff_member_id', staffId); return (response as List) .map((item) => StoreModel.fromJson(item['store'])) .toList(); } // Assegna un membro a un negozio Future assignToStore(String staffId, String storeId) async { await _supabase.from('staff_in_stores').insert({ 'staff_member_id': staffId, 'store_id': storeId, }); } // Rimuove l'assegnazione Future removeFromStore(String staffId, String storeId) async { await _supabase .from('staff_in_stores') .delete() .eq('staff_member_id', staffId) .eq('store_id', storeId); } // Nel StaffRepository // Utility per pulire le assegnazioni esistenti prima di riscriverle Future clearStoreAssignments(String staffId) async { await _supabase .from('staff_in_stores') .delete() .eq('staff_member_id', staffId); } }