// Implementação HTTP — o backend NestJS da fase 1.
//
// Continua aqui porque `MG-9` ainda não desligou o servidor antigo: enquanto a
// migração não é verificada ponta a ponta (`MG-8`), poder voltar para ele é o
// que separa "trocamos o backend" de "não temos backend".
import '../../../core/api/api_client.dart';
import 'participantes_repository.dart';

class ParticipantesRepositoryHttp implements ParticipantesRepository {
  ParticipantesRepositoryHttp(this._api);

  final ApiClient _api;

  @override
  Future<ListaParticipantes> listar(String poolId) async {
    final r = await _api.get<Map<String, dynamic>>('/pools/$poolId/members');
    return ListaParticipantes.doJson(r);
  }

  @override
  Future<StatusDaRodada> statusDaRodada(String poolId, int matchday) async {
    final r = await _api.get<Map<String, dynamic>>(
      '/pools/$poolId/members/prediction-status/$matchday',
    );
    return StatusDaRodada.doJson(r);
  }

  @override
  Future<void> promover(String poolId, String userId) async {
    await _api.patch<Map<String, dynamic>>(
      '/pools/$poolId/members/$userId/promote',
    );
  }

  @override
  Future<void> rebaixar(String poolId, String userId) async {
    await _api.patch<Map<String, dynamic>>(
      '/pools/$poolId/members/$userId/demote',
    );
  }

  @override
  Future<void> remover(String poolId, String userId) async {
    await _api.delete<Map<String, dynamic>>('/pools/$poolId/members/$userId');
  }

  @override
  Future<void> sair(String poolId) async {
    await _api.post<Map<String, dynamic>>('/pools/$poolId/members/leave');
  }

  @override
  Future<Regras> regras(String poolId) async {
    final r = await _api.get<Map<String, dynamic>>('/pools/$poolId/rules');
    return Regras.doJson(r);
  }

  @override
  Future<List<Aviso>> avisos(String poolId) async {
    final r = await _api.get<List<dynamic>>('/pools/$poolId/notifications');
    return r.cast<Map<String, dynamic>>().map(Aviso.doJson).toList();
  }

  @override
  Future<void> marcarLido(String poolId, String avisoId) async {
    await _api.patch<void>('/pools/$poolId/notifications/$avisoId/read');
  }
}
