import 'package:supabase_flutter/supabase_flutter.dart'; class TeamController { final _supabase = Supabase.instance.client; // 1. Variável fixa para guardar o Stream principal late final Stream>> teamsStream; // 2. Dicionário (Cache) para não recriar Streams de contagem repetidos final Map> _playerCountStreams = {}; TeamController() { // INICIALIZAÇÃO: O stream é criado APENAS UMA VEZ quando abres a página! teamsStream = _supabase .from('teams') .stream(primaryKey: ['id']) .order('name', ascending: true) .map((data) => List>.from(data)); } // CRIAR Future createTeam(String name, String season, String? imageUrl) async { try { await _supabase.from('teams').insert({ 'name': name, 'season': season, 'image_url': imageUrl, 'is_favorite': false, }); print("✅ Equipa guardada no Supabase!"); } catch (e) { print("❌ Erro ao criar: $e"); } } // ELIMINAR Future deleteTeam(String id) async { try { await _supabase.from('teams').delete().eq('id', id); // Limpa o cache deste teamId se a equipa for apagada _playerCountStreams.remove(id); } catch (e) { print("❌ Erro ao eliminar: $e"); } } // FAVORITAR Future toggleFavorite(String teamId, bool currentStatus) async { try { await _supabase .from('teams') .update({'is_favorite': !currentStatus}) .eq('id', teamId); } catch (e) { print("❌ Erro ao favoritar: $e"); } } // CONTAR JOGADORES (AGORA COM CACHE DE MEMÓRIA!) Stream getPlayerCountStream(String teamId) { // Se já criámos um "Tubo de ligação" para esta equipa, REUTILIZA-O! if (_playerCountStreams.containsKey(teamId)) { return _playerCountStreams[teamId]!; } // Se é a primeira vez que pede esta equipa, cria a ligação e guarda na memória final newStream = _supabase .from('members') .stream(primaryKey: ['id']) .eq('team_id', teamId) .map((data) => data.length); _playerCountStreams[teamId] = newStream; // Guarda no dicionário return newStream; } // LIMPEZA FINAL QUANDO SAÍMOS DA PÁGINA void dispose() { // Limpamos o dicionário de streams para libertar memória RAM _playerCountStreams.clear(); } }