import 'package:supabase_flutter/supabase_flutter.dart'; import '../models/provider_model.dart'; class ProviderRepository { final _supabase = Supabase.instance.client; // --- ASSOCIAZIONE PROVIDER <-> STORE --- // Aggiunge un provider a un negozio (Attiva mandato) Future associateProviderToStore({ required String providerId, required String storeId, }) async { try { await _supabase.from('providers_in_stores').insert({ 'provider_id': providerId, 'store_id': storeId, }); } catch (e) { throw Exception('Errore durante l\'associazione provider: $e'); } } // Rimuove un provider da un negozio (Disattiva mandato) Future disassociateProviderFromStore({ required String providerId, required String storeId, }) async { try { await _supabase .from('providers_in_stores') .delete() .eq('provider_id', providerId) .eq('store_id', storeId); } catch (e) { throw Exception('Errore durante la disassociazione provider: $e'); } } // Recupera tutti i provider di una company (per la lista generale) Future> fetchAllCompanyProviders(String companyId) async { try { final response = await _supabase .from('provider') .select() .eq('company_id', companyId); return (response as List).map((m) => ProviderModel.fromMap(m)).toList(); } catch (e) { throw Exception('Errore fetch provider: $e'); } } // Recupera gli ID dei provider associati a uno store (utile per le checkbox) Future> fetchAssociatedProviderIds(String storeId) async { try { final response = await _supabase .from('providers_in_stores') .select('provider_id') .eq('store_id', storeId); return (response as List) .map((item) => item['provider_id'].toString()) .toList(); } catch (e) { throw Exception('Errore recupero ID associati: $e'); } } // --- FUNZIONI STANDARD --- // Questa la userai nel Form Servizi: carica solo i provider abilitati per lo store Future> fetchActiveProvidersForStore( String storeId, ) async { try { final response = await _supabase .from('provider') .select('*, providers_in_stores!inner(store_id)') .eq('providers_in_stores.store_id', storeId) .eq('is_active', true); return (response as List).map((m) => ProviderModel.fromMap(m)).toList(); } catch (e) { throw Exception('Errore fetch provider attivi: $e'); } } // Salva o aggiorna l'anagrafica del Provider Future saveProvider(ProviderModel provider) async { await _supabase.from('provider').upsert(provider.toMap()); } }