namespace SameBeat.Application.Interfejsy;
///
/// Cienki klient LiveKit Room Service API (Twirp/HTTP) -- jedyny sposob, zeby FIZYCZNIE zmienic
/// uprawnienia publikacji uczestnika, ktory jest juz polaczony (token wydany wczesniej dalej dziala
/// az do wygasniecia, wiec samo przelogowanie po stronie bazy nie wystarczy). Uzywane w ETAPIE 5 do
/// twardego wymuszenia odebrania mikrofonu -- patrz komentarz w SerwisMikrofonu.
///
/// UWAGA: implementacja traktuje to jako "best effort" -- gdy LiveKit jest niedostepny, loguje blad
/// i NIE rzuca wyjatku, bo autorytatywnym zrodlem prawdy jest baza + kolejne wydawane tokeny
/// (SerwisTokenowLiveKit juz dzis liczy uprawnienia z aktualnego stanu, nie z tego, co bylo w
/// poprzednim tokenie).
///
public interface ISerwisAdministracjiLiveKit
{
///
/// Ustawia uczestnikowi o danej tozsamosci canPublishSources w podanym pokoju -- zawsze "camera",
/// a "microphone" tylko gdy . Nigdy nie rzuca -- awaria LiveKit
/// jest logowana i polykana, nie wywala calej operacji biznesowej.
///
Task UstawUprawnieniaMikrofonuAsync(string identity, string nazwaPokoju, bool mikrofonWlaczony, CancellationToken token = default);
///
/// TWARDE usuniecie ze sceny (ETAP 7) -- czysci canPublishSources do pustej listy, wiec uczestnik
/// fizycznie traci prawo publikacji ZARoWNO kamery, jak i mikrofonu (w odroznieniu od
/// , ktora zawsze zostawia kamere). Uzywane, gdy host
/// zwalnia slot sceny -- domyka luke celowo odlozona w ETAPACH 2-3 (miekkie usuniecie tylko w bazie).
/// Tak samo best-effort jak wyzej -- nigdy nie rzuca.
///
Task OdbierzUprawnieniaScenyAsync(string identity, string nazwaPokoju, CancellationToken token = default);
}