import 'package:get_it/get_it.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import '../models/provider_model.dart'; import '../models/provider_location_model.dart'; class ProviderRepository { final _supabase = GetIt.I.get(); // 1. Carica i provider abilitati per uno specifico Store Future> getProvidersByStore(String storeId) async { final response = await _supabase .from('providers_in_stores') .select(''' provider_id, provider:provider ( *, provider_locations (*) ) ''') .eq('store_id', storeId) .order('name', referencedTable: 'provider'); // Mappiamo i risultati estraendo l'oggetto 'provider' annidato return (response as List).map((row) { return ProviderModel.fromMap(row['provider'] as Map); }).toList(); } // 2. Carica TUTTI i provider della Company (per la gestione anagrafica) Future> getAllCompanyProviders() async { final response = await _supabase .from('provider') .select('*, provider_locations (*)') .order('name'); return (response as List) .map((row) => ProviderModel.fromMap(row as Map)) .toList(); } // 3. Salvataggio atomico (Upsert) del Provider Future saveProvider( ProviderModel provider, List enabledStoreIds, ) async { // A. Salva/Aggiorna il Provider principale final savedRow = await _supabase .from('provider') .upsert(provider.toMap()) .select() .single(); final savedProvider = ProviderModel.fromMap(savedRow); // B. Sincronizza gli Store (Cancelliamo i vecchi e mettiamo i nuovi per semplicità) // In un'app ad alto traffico faremmo un confronto, qui l'upsert totale è più veloce da scrivere. await _supabase .from('providers_in_stores') .delete() .eq('provider_id', savedProvider.id!); if (enabledStoreIds.isNotEmpty) { final storeLinks = enabledStoreIds .map((sId) => {'provider_id': savedProvider.id, 'store_id': sId}) .toList(); await _supabase.from('providers_in_stores').insert(storeLinks); } return savedProvider; } // 4. Gestione Sedi (Locations) Future saveLocation(ProviderLocationModel location) async { await _supabase.from('provider_locations').upsert(location.toMap()); } Future deleteLocation(String locationId) async { await _supabase.from('provider_locations').delete().eq('id', locationId); } }