import 'package:supabase_flutter/supabase_flutter.dart';

class TeamController {
  // Instância do cliente Supabase
  final _supabase = Supabase.instance.client;

  // 1. STREAM (Realtime)
  // Adicionei o .map() no final para garantir que o Dart entende que é uma List<Map>
  Stream<List<Map<String, dynamic>>> get teamsStream {
    return _supabase
        .from('teams')
        .stream(primaryKey: ['id'])
        .order('name', ascending: true)
        .map((data) => List<Map<String, dynamic>>.from(data));
  }

  // 2. CRIAR
  // Alterei imageUrl para String? (pode ser nulo) para evitar erros se não houver imagem
  Future<void> 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");
    }
  }

  // 3. ELIMINAR
  Future<void> deleteTeam(String id) async {
    try {
      await _supabase.from('teams').delete().eq('id', id);
    } catch (e) {
      print("❌ Erro ao eliminar: $e");
    }
  }

  // 4. FAVORITAR
  Future<void> toggleFavorite(String teamId, bool currentStatus) async {
    try {
      await _supabase
          .from('teams')
          .update({'is_favorite': !currentStatus}) // Inverte o valor
          .eq('id', teamId);
    } catch (e) {
      print("❌ Erro ao favoritar: $e");
    }
  }

  // 5. CONTAR JOGADORES
  // CORRIGIDO: A sintaxe antiga dava erro. O método .count() é o correto agora.
  Future<int> getPlayerCount(String teamId) async {
    try {
      final count = await _supabase
          .from('members')
          .count() // Retorna diretamente o número inteiro
          .eq('team_id', teamId);
      return count;
    } catch (e) {
      print("Erro ao contar jogadores: $e");
      return 0;
    }
  }

  // Mantemos o dispose vazio para não quebrar a chamada na TeamsPage
  void dispose() {}
}