import 'package:supabase_flutter/supabase_flutter.dart'; import '../models/game_model.dart'; class GameController { final _supabase = Supabase.instance.client; // 1. LER JOGOS (Stream em Tempo Real) Stream> get gamesStream { return _supabase .from('games') // 1. Fica à escuta da tabela original (Garante o Tempo Real!) .stream(primaryKey: ['id']) .asyncMap((event) async { // 2. Sempre que a tabela 'games' mudar (novo jogo, alteração de resultado), // vamos buscar os dados já misturados com as imagens à nossa View. final viewData = await _supabase .from('games_with_logos') .select() .order('game_date', ascending: false); // 3. Convertemos para a nossa lista de objetos Game return viewData.map((json) => Game.fromMap(json)).toList(); }); } // ========================================================================= // 👇 NOVO: LER JOGOS COM FILTROS DE EQUIPA E TEMPORADA (MANTÉM OS LOGOS) // ========================================================================= // ========================================================================= // 👇 LER JOGOS COM FILTROS DE EQUIPA E TEMPORADA (SEM ERROS DE QUERY) // ========================================================================= Stream> getFilteredGames({required String teamFilter, required String seasonFilter}) { return _supabase .from('games') .stream(primaryKey: ['id']) .asyncMap((event) async { // 1. Começamos a query APENAS com o select (Sem o order ainda!) var query = _supabase.from('games_with_logos').select(); // 2. Se a temporada não for "Todas", aplicamos o filtro AQUI if (seasonFilter != 'Todas') { query = query.eq('season', seasonFilter); } // 3. Executamos a query e aplicamos o ORDER BY no final final viewData = await query.order('game_date', ascending: false); List games = viewData.map((json) => Game.fromMap(json)).toList(); // 4. Filtramos a equipa em memória if (teamFilter != 'Todas') { games = games.where((g) => g.myTeam == teamFilter || g.opponentTeam == teamFilter).toList(); } return games; }); } // 2. CRIAR JOGO // Retorna o ID do jogo criado para podermos navegar para o placar Future createGame(String myTeam, String opponent, String season) async { try { final response = await _supabase.from('games').insert({ 'my_team': myTeam, 'opponent_team': opponent, 'season': season, 'my_score': 0, 'opponent_score': 0, 'status': 'Decorrer', // Começa como "Decorrer" 'game_date': DateTime.now().toIso8601String(), }).select().single(); // .select().single() retorna o objeto criado return response['id']; // Retorna o UUID gerado pelo Supabase } catch (e) { print("Erro ao criar jogo: $e"); return null; } } void dispose() { // Não é necessário fechar streams do Supabase manualmente aqui } }