import 'dart:io';
import 'package:supabase_flutter/supabase_flutter.dart';

class TeamController {
  final _supabase = Supabase.instance.client;

  // 1. STREAM (Realtime)
  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 (Agora aceita um File e faz o Upload!)
  Future<void> createTeam(String name, String season, File? imageFile) async {
    try {
      String? uploadedImageUrl;

      // Se o utilizador escolheu uma imagem, fazemos o upload primeiro
      if (imageFile != null) {
        // Criar um nome único para o ficheiro (ex: id do user + timestamp)
        final userId = _supabase.auth.currentUser?.id ?? 'default';
        final fileName = '${userId}_${DateTime.now().millisecondsSinceEpoch}.png';
        final storagePath = 'teams/$fileName';

        // Faz o upload para o bucket 'avatars' (podes usar o mesmo ou criar um chamado 'teams_logos')
        await _supabase.storage.from('avatars').upload(
          storagePath, 
          imageFile,
          fileOptions: const FileOptions(cacheControl: '3600', upsert: true)
        );

        // Vai buscar o URL público
        uploadedImageUrl = _supabase.storage.from('avatars').getPublicUrl(storagePath);
      }

      // Agora insere a equipa na base de dados (com ou sem URL)
      await _supabase.from('teams').insert({
        'name': name,
        'season': season,
        'image_url': uploadedImageUrl ?? '', // Se não houver foto, guarda vazio
        'is_favorite': false,
      });
      print("✅ Equipa guardada no Supabase!");
    } catch (e) {
      print("❌ Erro ao criar equipa: $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})
          .eq('id', teamId);
    } catch (e) {
      print("❌ Erro ao favoritar: $e");
    }
  }

  // 5. CONTAR JOGADORES (LEITURA ÚNICA)
  Future<int> getPlayerCount(String teamId) async {
    try {
      final count = await _supabase.from('members').count().eq('team_id', teamId);
      return count;
    } catch (e) {
      return 0;
    }
  }

  // 6. CONTAR JOGADORES (STREAM EM TEMPO REAL)
Future<List<Map<String, dynamic>>> getTeamsWithStats() async {
    final data = await _supabase
        .from('teams_with_stats') // Lemos da View que criámos!
        .select('*')
        .order('name', ascending: true);
    return List<Map<String, dynamic>>.from(data);
  }
  void dispose() {}
}