using SameBeat.Application.DTO;
using SameBeat.Application.Interfejsy;
using SameBeat.Domain.Encje;
namespace SameBeat.Application.Serwisy;
///
/// Buduje StanMikrofonuDto z aktualnego stanu Wydarzenie -- wspolne dla SerwisMikrofonu (po kazdej
/// akcji hosta / GET stanu) i SerwisWydarzen (GET /api/events/current), zeby ksztalt danych zawsze byl
/// identyczny w obu miejscach. Dokladnie ten sam powod, dla ktorego istnieje juz BudowniczyStanuMuzyki.
///
public static class BudowniczyStanuMikrofonu
{
public static async Task ZbudujAsync(
Wydarzenie wydarzenie,
IRepozytoriumPoczekalni repozytoriumPoczekalni,
IRepozytoriumSceny repozytoriumSceny,
CancellationToken token)
{
if (wydarzenie.AktywnyMikrofonUczestnikId is not Guid uczestnikId)
{
return new StanMikrofonuDto(null, null, null);
}
var uczestnik = await repozytoriumPoczekalni.ZnajdzPoIdAsync(uczestnikId, token);
var slot = await repozytoriumSceny.ZnajdzPoUczestnikuAsync(wydarzenie.Id, uczestnikId, token);
return new StanMikrofonuDto(slot?.NumerSlotu, uczestnik?.Nick, wydarzenie.AktywnyMikrofonKoniecUtc);
}
}